Javascript crypto.createCipheriv->;cipher.update+;cipher.final不返回缓冲区?

Javascript crypto.createCipheriv->;cipher.update+;cipher.final不返回缓冲区?,javascript,node.js,Javascript,Node.js,我创建了一个通过两个缓冲区的密码。buf1是它们的键,一个32字节的缓冲区,buf2是IV,也是一个32字节的缓冲区,我将其切片为仅使用16个字节。文档说明cipher.update和cipher.final在未指定任何内容时返回缓冲区。这就是我希望发生的事情。虽然我想我可以做一个新的缓冲区(加密的“二进制”)来转换它,但我想知道我是否做错了什么 > var cipher = crypto.createCipheriv('aes-256-cbc', buf1, buf2.slice(0,1

我创建了一个通过两个缓冲区的密码。buf1是它们的键,一个32字节的缓冲区,buf2是IV,也是一个32字节的缓冲区,我将其切片为仅使用16个字节。文档说明cipher.update和cipher.final在未指定任何内容时返回缓冲区。这就是我希望发生的事情。虽然我想我可以做一个新的缓冲区(加密的“二进制”)来转换它,但我想知道我是否做错了什么

> 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

我使用的是node.js版本0.10.10,它是最新的稳定版本,应该与链接的文档相匹配:

$ node -v
v0.10.10

这是文档错误还是我的错误?我知道,对于v0.8 pbkdf2,它返回一个二进制字符串,而不是一个缓冲区,而对于0.10.10,它返回一个缓冲区,如文档所述。我希望密码也能与缓冲区一起工作,而不是使用二进制。。。为了保持一致性。

您使用将缓冲区转换为字符串的
+=
来连接它们。您的代码应该更像这样:

var cipher = crypto.createCipheriv('aes-256-cbc', buf1, buf2.slice(0,16));
var cryptedBuffers = [cipher.update(new Buffer('this is some test'))];
cryptedBuffers.push(cipher.final());

// at this point `cryptedBuffers` is an array of buffers which you can turn 
// into a single buffer by doing

var crypted = Buffer.concat(cryptedBuffers);

啊,比我快了9秒!;)哈哈哈,今天第二次:)帮助了我将近7年。谢谢