项目里使用过md5、base64,使用AES的安全系数会高一些。
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法,微信小程序加密传输就是用这个加密算法的。由于h5项目需要从安卓app和ios拿到AES加密数据进行处理,所以根据安卓给的代码加上万能的百度快速得看了一下AES。
对称加密算法也就是加密和解密用相同的一些参数:
- 密钥key
- 偏移量十六进制iv
- 编码Base64还是Hex
- 模式mode 选择ECB还是CBC...
- 填充Pkcs5P还是Pkcs7P...
- 字符集是utf8还是gbk...
以上内容,不管是从后端拿文进行解码,还是后端从前端拿文解码,都需要保持以上参数一致。
第一次接触AES的人可能有点迷糊,盲目抄代码是没用的,要先了解AES究竟需要什么参数进行转换的。盲目到处搜索和抄代码只会浪费时间,不如去快速了解一下这个东西究竟是什么
可能以上的内容让你有点还是搞不懂,那么看看这个AES在线转码可能就能理解一些了。
SSL在线工具-AES在线加解密-AES encryption-SSLeye官网
这次我拿ECB模式、pks5、utf8、base64、密码为:~!@#$%^&*()_+123,进行加密,如图:
加密出来的密文是:FVRywVYCoT/SNpJRlhGypQ==
看看解密出来的是什么
引入crypto-js
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
js代码解密得出 hello
// 解密事件---
function decipherinHandler(word) {
var key = CryptoJS.enc.Utf8.parse("~!@#$%^&*()_+123");//密码 utf8
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,//模式
padding: CryptoJS.pad.Pkcs7
});
console.log('decipherin:',CryptoJS.enc.Utf8.stringify(decrypt).toString())
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
decipherinHandler('FVRywVYCoT/SNpJRlhGypQ==');//decipherin: hello
js代码字符串 hello 进行AES加密 得出:FVRywVYCoT/SNpJRlhGypQ==
// 加密事件
function encryptionHandler(word) {
var key = CryptoJS.enc.Utf8.parse("~!@#$%^&*()_+123");
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log('encryption:',encrypted.toString());
return encrypted.toString();
}
encryptionHandler('hello')//encryption:FVRywVYCoT/SNpJRlhGypQ==