java 3des加密解密

package com.yihui.threedes;

import java.security.Key;
import java.util.Scanner;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

import sun.misc.BASE64Decoder;


public class Destest {
	/**
	 * BASE64Decoder 对象 用于拿到加密后传过来的字符串转byte
	 */
	static final BASE64Decoder decoder = new BASE64Decoder();
	public static void main(String[] args) throws Exception {
		/**
		 * 密钥 32位 固定 与加密密钥一致
		 */
		byte[] key = new BASE64Decoder().decodeBuffer("fffffffe79ffffff9bffffffd36b2c1c");
		byte[] keyiv = { 1, 2, 3, 4, 5, 6, 7, 8 };
		Scanner sc = new Scanner(System.in);
//拿到存储地址的byte数据
		byte[] strDecode = des3DecodeCBC(key, keyiv, decoder.decodeBuffer("zb4vF6cO48g="));
		String strGet = new String(strDecode, "UTF-8");
		System.out.println("解密后的字符串内容为:" + strGet);
	}

	public static byte[] des3EncodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {
		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(key);
		SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
		deskey = keyfactory.generateSecret(spec);
		Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
		IvParameterSpec ips = new IvParameterSpec(keyiv);
		cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
		byte[] bOut = cipher.doFinal(data);
		return bOut;
	}

	public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {
		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(key);
		SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
		deskey = keyfactory.generateSecret(spec);
		Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
		IvParameterSpec ips = new IvParameterSpec(keyiv);
		cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
		byte[] bOut = cipher.doFinal(data);
		return bOut;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39313596/article/details/80579578
今日推荐