nodejs php aes加密解密,nodejs中aes-128-cbc加密和解密

和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加密和解密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值