nodejs中aes-128-cbc加密和解密
阿新 • • 發佈:2019-02-09
和java程式進行互動的時候,java那邊使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中採用對應的aes-128-cbc加密方法就能對應上,因為有使用向量(iv),所以nodejs中要用createCipheriv方法,而不是createCipher。
在這類加密和解密的計算中,最最要注意的就是中文編碼問題,不然鐵定採坑。我踩完坑了,把能跑的程式碼發上來下,執行環境nodejs 4.4.6。
var crypto = require('crypto');
/**
* 加密方法
* @param key 加密key
* @param iv 向量
* @param data 需要加密的資料
* @returns string
*/
var encrypt = function (key, iv, data) {
var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
var crypted = cipher.update(data, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64' );
return crypted;
};
/**
* 解密方法
* @param key 解密的key
* @param iv 向量
* @param crypted 密文
* @returns string
*/
var decrypt = function (key, iv, crypted) {
crypted = new Buffer(crypted, 'base64').toString('binary');
var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
var decoded = decipher.update(crypted, 'binary', 'utf8');
decoded += decipher.final('utf8');
return decoded;
};
var key = '751f621ea5c8f930';
console.log('加密的key:', key.toString('hex'));
var iv = '2624750004598718';
console.log('加密的iv:', iv);
var data = "Hello, nodejs. 演示aes-128-cbc加密和解密";
console.log("需要加密的資料:", data);
var crypted = encrypt(key, iv, data);
console.log("資料加密後:", crypted);
var dec = decrypt(key, iv, crypted);
console.log("資料解密後:", dec);
執行輸出結果:
加密的key: 751f621ea5c8f930
加密的iv: 2624750004598718
需要加密的資料: Hello, nodejs. 演示aes-128-cbc加密和解密
資料加密後: 7L/q8ZzHLaNI1ToA/RA9b/eznGIYtO9dhTqoo105bNtsTo/QOoCTyljNy6DvU1X+
資料解密後: Hello, nodejs. 演示aes-128-cbc加密和解密