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加密和解密
原文:http://www.01happy.com/nodejs-aes-128-cbc/
- 上一篇 »python Aes 加密 解密
- 下一篇 ».NET与Java互通AES算法加密解密