AES后端加密解密数据CBC模式
今天项目有用到加密登陆密码,实际业务是前端加密,后端解密,主要使用的是AES进行解密
主要maven依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
上代码
public class AESUtil {
//密钥 (需要前端和后端保持一致)要求16位
private static final String KEY = "12345678910abcde";
//偏移量(CBC模式需要,需要前端和后端保持一致)要求16位
private static final String IV = "12345678910abcde";
//具体算法/加密模式/补码方式
private static final String ALGORITHMSTR = "AES/CBC/PKCS5Padding";
//测试
public static void main(String[] args) throws Exception {
String password = "123456";
System.out.println("加密前:" + password);
String encrypt = encrypt(password);
System.out.println("加密后:" + encrypt);
String decrypt = decrypt(encrypt);
System.out.println("解密后:" + decrypt);
}
// 加密
public static String encrypt(String sSrc) throws Exception {
byte[] raw = KEY.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
//"算法/CBC模式/补码方式"
Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());
//BASE64做转码功能,进行2次加密
return new BASE64Encoder().encode(encrypted);
}
// 解密
public static String decrypt(String sSrc) throws Exception {
byte[] raw = KEY.getBytes("UTF-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
//base64解密
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
}
}
总结:第一次用到AES加密,自己也整理了一下,这个算是很简单也很好理解使用的一个工具类。具体里面的KEY和IV是可以自定义的,字母数字均可,要求是16位。里面具体的一些api可以查看源码研究研究,技术不行。
不对之处欢迎指点
来源:CSDN
作者:jiang_jingjing
链接:https://blog.csdn.net/jiang_jingjing/article/details/103715185