node.js从随机源创建初始化向量(IV)

Jac*_* M. 12 node.js

如何从NodeJS中的随机源创建初始化向量(IV),就像我在PHP中一样,如下所示:

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
Run Code Online (Sandbox Code Playgroud)

在NodeJS中,我认为crypto.createCipheriv可以帮助但不是.

gya*_*ana 30

你走在正确的轨道上仍然需要使用:

Crypto.createCipheriv()
Run Code Online (Sandbox Code Playgroud)

可以为您生成随机初始化向量的函数是:

Crypto.randomBytes(16)
Run Code Online (Sandbox Code Playgroud)

16表示满足向量所需长度所需的字节数.

举个例子:

var iv = Crypto.randomBytes(16);
var cipher = Crypto.createCipheriv('aes-128-cbc', new Buffer(<128 bit password>), iv);
var encrypted = cipher.update(clearText);
var finalBuffer = Buffer.concat([encrypted, cipher.final()]);
//Need to retain IV for decryption, so this can be appended to the output with a separator (non-hex for this example)
var encryptedHex = iv.toString('hex') + ':' + finalBuffer.toString('hex')
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这里是解密上述内容的一个例子 encryptedHex

var encryptedArray = encryptedHex.split(':');
var iv = new Buffer(encryptedArray[0], 'hex');
var encrypted = new Buffer(encryptedArray[1], 'hex');
var decipher = Crypto.createDecipheriv('aes-128-cbc', new Buffer(<128 bit password>), iv);
var decrypted = decipher.update(encrypted);
var clearText = Buffer.concat([decrypted, decipher.final()]).toString();
Run Code Online (Sandbox Code Playgroud)

  • `new Buffer(&lt;128 位密码&gt;)` 请参阅 PBKDF2 了解如何有效地执行此操作。https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback (2认同)