gpt4 book ai didi

encryption - 这个简单的 NodeJS 加密函数有什么问题?

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:57 26 4
gpt4 key购买 nike

我正在尝试使用 url 查询字符串的零填充来执行 AES CBC 加密。我正在使用 NodeJS 的核心加密模块。它用于 http://www.blackoutrugby.com/game/help.documentation.php#category=35

我有一把 key 和 IV。在测试以下函数时,我没有得到完整返回的字符串。我相信这与填充有关,但不确定如何正确应用它。

如果是填充,谁能告诉我应该如何应用它?如果不是我哪里错了? cipher.final() 在此用户案例中也很重要吗?

更新:我现在已经包含了 cipher.final() 并且二进制格式的东西工作正常但是 base64 给了我截断的结果。 https://github.com/denishoctor/BlackoutRugbyNode/blob/master/crypto2.js是我的完整示例代码。下面是加密函数:

function cryptoTest(data, key, iv, format) {
var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
var cipherChunks = [];
cipherChunks.push(cipher.update(data, 'utf8', format));
cipherChunks.push(cipher.final());

var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
var plainChunks = [];
for (var i = 0;i < cipherChunks.length;i++) {
plainChunks.push(decipher.update(cipherChunks[i], format, 'utf8'));
}
plainChunks.push(decipher.final());

return {
"encrypted": cipherChunks.join(''),
"decrypted": plainChunks.join('')
};
}

谢谢,
丹尼斯

最佳答案

您没有将 cipher.final 返回的密文放入解密器中。这是一个简化的例子。您需要收集每次调用 cipher.update 和 cipher.final 的返回值,并确保将这些对象中的每一个都放入 decipher.update 中。

更新:这里有一个版本可以很好地使用 binaryhex 作为密文的编码,但不能使用 base64。我不知道这是为什么,但如果你对十六进制没问题,那应该没问题。

更新 2:看起来 base64 是 Node 本身的错误。参见 this answer to a similar question .

    var crypto = require('crypto');

var data = "I am the clear text data";
console.log('Original cleartext: ' + data);
var algorithm = 'aes-128-cbc';
var key = 'mysecretkey';
var clearEncoding = 'utf8';
var cipherEncoding = 'hex';
//If the next line is uncommented, the final cleartext is wrong.
//cipherEncoding = 'base64';
var cipher = crypto.createCipher(algorithm, key);
var cipherChunks = [];
cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));
cipherChunks.push(cipher.final(cipherEncoding));
console.log(cipherEncoding + ' ciphertext: ' + cipherChunks.join(''));
var decipher = crypto.createDecipher(algorithm, key);
var plainChunks = [];
for (var i = 0;i < cipherChunks.length;i++) {
plainChunks.push(decipher.update(cipherChunks[i], cipherEncoding, clearEncoding));

}
plainChunks.push(decipher.final(clearEncoding));
console.log("UTF8 plaintext deciphered: " + plainChunks.join(''));

关于encryption - 这个简单的 NodeJS 加密函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977865/

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