gpt4 book ai didi

node.js - Node JS decipher.final() 抛出 "wrong final block length"错误

转载 作者:行者123 更新时间:2023-12-04 04:02:57 27 4
gpt4 key购买 nike

我正在尝试加密/解密。加密工作正常,它将加密数据写入文件。解密时出现长度错误问题。我使用了“utf-8”格式,但错误仍然存​​在。

/ A decrypt function 
function decrypt(file) {

let data = JSON.parse(fs.readFileSync(file));

let iv = Buffer.from(data.iv, 'hex');
let encryptedText =
Buffer.from(data.encryptedData, 'hex');


// Creating Decipher
let decipher = crypto.createDecipheriv(
algorithm, Buffer.from(key), iv);

// Updating encrypted text
let decrypted = decipher.update(encryptedText);
let decrypted = Buffer.concat([decrypted, decipher.final()]);

// // returns data after decryption
return decrypted.toString();
}
//run 
// Decrypts output
console.log(decrypt('./file.json.enc'));
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
at Decipheriv.final (internal/crypto/cipher.js:170:29)
at decrypt (/Users/chandrasekarareddy/Documents/projects/encrypt/final.js:48:22)
at Object.<anonymous> (/Users/chandrasekarareddy/Documents/projects/encrypt/final.js:64:13)
at Module._compile (internal/modules/cjs/loader.js:959:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
at Module.load (internal/modules/cjs/loader.js:815:32)
at Function.Module._load (internal/modules/cjs/loader.js:727:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10)
at internal/main/run_main_module.js:17:11 {
library: 'digital envelope routines',
function: 'EVP_DecryptFinal_ex',
reason: 'wrong final block length',
code: 'ERR_OSSL_EVP_WRONG_FINAL_BLOCK_LENGTH'
}

它在 decipher.final() 处抛出错误。如果我传递文本而不是文件作为输入参数,那是错误的。提前致谢

最佳答案

如果您遇到此错误,很可能是因为您传递了错误的 key 。如果 key 被错误地编码到有问题的文件中,就会发生这种情况。

我建议最好的方法是以十六进制格式进行编码(因为我们在这里使用的是 JSON)。

这是一个完整的编码为 .json.enc 文件的示例,然后再次解码。请注意,我使用的是 aes-256-cbc,因此如果您更改加密模式,则 key 和 iv 长度可能必须更改。

const crypto = require("crypto");
const fs = require("fs");

function encrypt(buffer, algorithm, key, iv) {
const cipher = crypto.createCipheriv(algorithm, key, iv);
return Buffer.concat([cipher.update(buffer, null), cipher.final()]);
}

function decrypt(buffer, algorithm, key, iv) {
const decipher = crypto.createDecipheriv(algorithm, key, iv);
return Buffer.concat([decipher.update(buffer), decipher.final()]);
}

function encryptToJsonFile(buffer, filePath, algorithm, key, iv) {
let encryptedData = encrypt(buffer, algorithm, key, iv);
let fileData = { encryptedData: encryptedData.toString("hex"), iv: iv.toString("hex") };
fs.writeFileSync(filePath, JSON.stringify(fileData), "utf8");
return fileData;
}

function decryptJsonFile(filePath, algorithm, key) {
let fileData = JSON.parse(fs.readFileSync(filePath, "utf8"));
let encryptedData = Buffer.from(fileData.encryptedData, "hex");
let iv = Buffer.from(fileData.iv, "hex");
return decrypt(encryptedData, algorithm, key, iv);
}

const filePath = "./test.json.enc";
const EncryptionAlgorithm = "aes-256-cbc";

const key = Buffer.from("70ac30ae736068d90467beec0aedd75f3714cfe1e83b030c67911bb649316be0", "hex");
const iv = Buffer.from("3d4be42df33cc6a030aa54df2e144920", "hex");

const textToEncrypt = "My secrets are here";
const bufferToEncrypt = Buffer.from(textToEncrypt, "utf8");

console.log("Encrypted:", encryptToJsonFile(bufferToEncrypt, filePath, EncryptionAlgorithm, key, iv));
console.log("Decrypted:", decryptJsonFile(filePath, EncryptionAlgorithm, key).toString("utf8"));

关于node.js - Node JS decipher.final() 抛出 "wrong final block length"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62813904/

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