AES128 CBC模式加密中初始化向量IV怎么设定?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AES128 CBC模式加密中初始化向量IV怎么设定?相关的知识,希望对你有一定的参考价值。

AES128 CBC模式加密中初始化向量IV怎么设定?

参考技术A 和Blocksize(16字节)一样大的数组,值任意,和解密保持一致。

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/

以上是关于AES128 CBC模式加密中初始化向量IV怎么设定?的主要内容,如果未能解决你的问题,请参考以下文章

AES GCM加密模式的初始向量IV怎么确定

python实现AES加密

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

如何安全地为 AES CBC 加密生成 IV?

AES 加密位: 128位,加密模式:CBC, 填充模式:Zeros

有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?