我创建了一个传递两个缓冲区的密码。buf1 是它们的键,一个 32 字节的缓冲区,而 buf2 是 IV,也是一个 32 字节的缓冲区,我将其切片为仅使用 16 个字节。文档说 cipher.update 和 cipher.final 在未指定任何内容时返回一个缓冲区。这实际上是我希望发生的事情。虽然我想我可以做一个新的 Buffer(crypted, 'binary') 来转换它,但我想知道我是否做错了什么。
> var cipher = crypto.createCipheriv('aes-256-cbc', buf1, buf2.slice(0,16));
undefined
> var crypted = cipher.update(new Buffer('this is some test'));
undefined
> crypted += cipher.final();
'!t\u001f\u0004>.\u0012\u0001���K\u001bSiA�]3\u0017�6�&�.��\u0015�V?'
0> Buffer.isBuffer(crypted)
false
http://nodejs.org/api/crypto.html#crypto_class_cipher
我正在使用 node.js 版本 0.10.10,它是最新的稳定版,据说与链接的文档相匹配:
$ node -v
v0.10.10
这是文档错误还是我的错误?我知道使用 v0.8 pbkdf2 返回二进制字符串而不是缓冲区,现在使用 0.10.10 它返回文档所述的缓冲区。我希望 cipher 也可以使用缓冲区而不是使用二进制来处理这一切......以保持一致性。