java实现 AES+base64,加解密传输+(已处理中文乱码问题)

工具类


import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;
import lombok.extern.slf4j.Slf4j;

/** 
 * AES加解密 
 * 
 */ 
@Slf4j
public class AESUtils {  
	public static final String CHAOSUKEY = "lijiong011652123";

	/**
	 * AES加密+Base64转码
	 * 
	 * @param data 明文(16进制)
	 * @param key  密钥
	 * @return
	 */
	public static String encrypt(String data, String key) {
		byte[] keyb = null;
		try {
			keyb = key.getBytes("utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		} // 明文
		SecretKeySpec sKeySpec = new SecretKeySpec(keyb, "AES");
		Cipher cipher = null;
		try {
			cipher = Cipher.getInstance("AES");
		} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
			e.printStackTrace();
		}
		try {
			cipher.init(Cipher.ENCRYPT_MODE, sKeySpec);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		}
		byte[] bjiamihou = null;
		String miwen = "";
		try {
			bjiamihou = cipher.doFinal(data.getBytes("utf-8"));
			// byte加密后
			miwen = Base64.encodeBase64String(bjiamihou);// 密文用base64加密
		} catch (IllegalBlockSizeException | BadPaddingException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		return miwen;
	}

	/**
	 * Base64解码 + AES解码
	 * 
	 * @param data 密文 (16进制)
	 * @param key  密钥
	 * @return
	 */
	public static String decrypt(String data, String key){
		byte[] keyb = null;
		try {
			keyb = key.getBytes("utf-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		byte[] miwen = Base64.decodeBase64(data);
		SecretKeySpec sKeySpec = new SecretKeySpec(keyb, "AES");
		Cipher cipher = null;
		try {
			cipher = Cipher.getInstance("AES");
		} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
			e.printStackTrace();
		}
		try {
			cipher.init(Cipher.DECRYPT_MODE, sKeySpec);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		}
		byte[] bjiemihou = null;
		String mingwen = "";
		try {
			bjiemihou = cipher.doFinal(miwen);
			// byte加密后
			mingwen = new String(bjiemihou,"utf-8");
		} catch (IllegalBlockSizeException | BadPaddingException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return mingwen;
	}

    public static void main(String[] args) throws Exception {  
    	// 测试加密工具类
    	String key = "lijiong011652123";//自定义16位字符串即可
    	String data = "d[i>>1] |= Character.digit((char) b[offset+i], 32) << shift";//明文
        String miwen = encrypt(data,key);// 加密
        decrypt(miwen,key);// 解密

    }  
}  

运行结果

密文:8dYwAHy5bXpC1ueJa6aj2C2NHNeYI2vBBZ/JMrKQ7fYMBtYSAzxIemc5nMNA52HQcG/siXThs/2FxqMKGGidvQ==
明文:d[i>>1] |= Character.digit((char) b[offset+i], 32) << shift

 

おすすめ

転載: blog.csdn.net/ladymorgana/article/details/101201210
おすすめ