AES加解密技术栈:crypto-js
在实际开发项目当中,前后端为了代码安全进行加密处理,先整理下aes加密。
aes加密是基于数据块的加密方式,也就是说,每次处理的数据时一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度
而aes加密又存在分组加密的几种模式:
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB:实际上是一种反馈模式,目的也是增强破解的难度。
FCB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
实际加解密代码如下:(CBC方式使用)
npm安装操作如下:
1.安装crypto-js npm install crypto-js --save
2.导入 import CryptoJS from ‘crypto-js/crypto-js’
3.AES加解密代码如下,备注:重点要关注mode跟padding需跟解密方一致,比如,在混合式开发中,H5跟native要保持一致,亦要跟不同的后端语言保持一致
原生js引用:
//解密
function aesedn(word) {
if(word == null){
return
}
let bytes = CryptoJS.AES.decrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedData = bytes.toString(CryptoJS.enc.Utf8);
return decryptedData;
}
// 加密
function aesen(word) {
if(word == null)
return
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
console.log(encrypted.toString())
return encrypted.toString();
}
const key = CryptoJS.enc.Utf8.parse('后端提供');
const iv = CryptoJS.enc.Utf8.parse('后端提供');
vue中封装
var CryptoJS = require("crypto-js");
//解密方法
function Decrypt(word) {
var key = CryptoJS.enc.Utf8.parse("XXXXXXXXXXXX");
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
//加密方法
function Encrypt(word) {
var key = CryptoJS.enc.Utf8.parse("XXXXXXXXXXXX");
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
export {
Decrypt,
Encrypt
}
下面就是具体实现具体操作!!!
希望能够一直进步,一直前行,各位加油!!!