gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:55 28 4
gpt4 key购买 nike

我创建了一个传递两个缓冲区的密码。 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 它返回一个缓冲区,如文档所述。我希望密码也能与缓冲区一起工作,而不是使用二进制……以保持一致性。

最佳答案

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

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);

关于javascript - crypto.createCipheriv -> cipher.update + cipher.final 不返回缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990967/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com