版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
desc
- 在做登录功能的时候,出于安全性考虑,我们需要将用户输入的明文密码进行加密,后台得到加密后的数据再进行解密
- 前台只作一件事,发送请求的时候将密码加密
- 后台将得到的数据解密后再进行后续处理
- 前后台沟通的桥梁是密钥和向量,两者规定长度位16,可相同
前台
安装 npm i crypto-js
加密函数
// key,iv长度为16位,可相同 自定义即可
const Encrypt = word => {
const keyStr = '1234567898745621';
const ivStr = keyStr;
const key = CryptoJS.enc.Utf8.parse(keyStr);
const iv = CryptoJS.enc.Utf8.parse(ivStr);
const srcs = CryptoJS.enc.Utf8.parse(word);
const encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
传参处理
后台处理
这里以springboot 为例
创建工具类AesHelper
public class AesHelper {
//使用AES-128-CBC加密模式,key,iv长度为16位,可相同 自定义即可
private static String key = "1234567898745621";
private static String iv = "1234567898745621";
//解密方法--接收aes加密后的字符串序列
public static String desEncrypt(String str) {
try {
byte[] decodeBytes = Base64.getDecoder().decode(str);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] original = cipher.doFinal(decodeBytes);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
System.out.println("解密失败:"+e.getMessage());
return null;
}
}
}
使用
AesHelper.desEncrypt(password)//静态方法不需要new,直接用就ok