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

来源:互联网 发布:台湾网络加速器 编辑:程序博客网 时间:2024/05/16 07:57

转自:http://www.tuicool.com/articles/YRZFZ3U

和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加密和解密
1 0
原创粉丝点击