AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB
例子源码: https://github.com/huangxiaolong1992/AES-node-js-.git
本文中给出的案例为aes-128-ecb
例1
node.js加密
let Encrypt=(dataStr, key, iv) =>{
let cipherChunks = [];
var key = '46cc793c53dc4511';
let cipher = crypto.createCipheriv('aes-128-ecb', key, "");
cipher.setAutoPadding(true);
cipherChunks.push(cipher.update(dataStr, 'utf8', 'base64'));
cipherChunks.push(cipher.final('base64'));
return cipherChunks.join('');
}
console.log( Encrypt("哈哈") ); //6RJhDqqcXtghRvwUFi6VRA==
js解密
function decrypt(word){
var key = CryptoJS.enc.Utf8.parse("46cc793c53dc4511");
var encrypted = CryptoJS.AES.decrypt( word, key,{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7 //和后端pkcs7 一致
});
return encrypted.toString(CryptoJS.enc.Utf8);
}
console.log( decrypt('6RJhDqqcXtghRvwUFi6VRA==') ) //哈哈
例2
js加密
function encrypt(word){
var key = CryptoJS.enc.Utf8.parse("46cc793c53dc4511");
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7 //和后端pkcs7 一致
});
return encrypted.toString();
}
console.log( encrypt('哈哈') ) //6RJhDqqcXtghRvwUFi6VRA==
node.js解密
let decrypt=(data)=>{
var key = '46cc793c53dc4511'; //长度取决于aes的类型
let decipher = crypto.createDecipheriv('aes-128-ecb', key,"");
const buf1 = new Buffer(data,"base64").toString('hex');
let decrypted = decipher.update(buf1, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
};
console.log( decrypt("6RJhDqqcXtghRvwUFi6VRA==") ); //哈哈