浅谈AES加解密
一、描述
AES高级加解密工具(可逆)
二、代码实现
1、AES加密、解密
package com.lanshen.utils.lsjavaUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* Created by Lanshen on 2019/11/29.
* AES高级加解密工具(可逆)
*/
public class lsaesUtils {
private static final String AES="AES";
private static final String CHAR_SET_NAME1="UTF-8";
private static final String CHAR_SET_NAME2="ASCII";
private static final String CIPHER_KEY="AES/CBC/PKCS5Padding";
//加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
private static final String IV_PARAMETER="a0.l954b_107x901";
//可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,需要为16位。
private static final String S_KEY="ax7x90.3k_10li5u";
/**
* AES加密
* @param encryptValue 明文
* @param encryptKey 加密的key,要求16位
* @param decryptKey 解密的key,要求16位
* @return 密文
*/
public static String AesEncrypt(String encryptValue,String encryptKey,String decryptKey) throws Exception {
Cipher cipher= Cipher.getInstance(CIPHER_KEY);
SecretKeySpec skeySpec = new SecretKeySpec(decryptKey.getBytes(), AES);
//使用CBC模式,需要一个向量iv,可增加加密算法的强度
IvParameterSpec iv = new IvParameterSpec(encryptKey.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
//此处使用BASE64做转码,并获得加密后的结果为。
String AesEncryptString = new BASE64Encoder().encode(cipher.doFinal(encryptValue.getBytes(CHAR_SET_NAME1)));
return AesEncryptString;
}
/**
* AES解密
* @param decryptValue 密文
* @param encryptKey 加密的key,要求16位
* @param decryptKey 解密的key,要求16位
* @return 明文
*/
public static String AesDecrypt(String decryptValue,String encryptKey,String decryptKey) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(decryptKey.getBytes(CHAR_SET_NAME2), AES);
Cipher cipher = Cipher.getInstance(CIPHER_KEY);
//使用CBC模式,需要一个向量iv,可增加加密算法的强度,用相对应的加密算法的向量
IvParameterSpec iv = new IvParameterSpec(encryptKey.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
//此处使用BASE64做解码,并获得解密后的结果为。
String AesDecryptString = new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(decryptValue)), CHAR_SET_NAME1);
return AesDecryptString;
}
public static void main(String[] args) throws Exception {
String key="我喜欢你很久了!";
//AES加密
String AesEncryptString = lsaesUtils.AesEncrypt(key,IV_PARAMETER,S_KEY);
System.out.println(AesEncryptString);
//AES解密
String AesDecryptString = lsaesUtils.AesDecrypt(AesEncryptString,IV_PARAMETER,S_KEY);
System.out.println(AesDecryptString);
}
}