gpt4 book ai didi

node.js - Nodejs 使用加密解密错误最终 block 长度错误

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:24 25 4
gpt4 key购买 nike

我使用此代码来加密/解密字符串值

var crypto = require('crypto');

function encrypt(text){
var cipher = crypto.createCipher('aes-256-cbc','secret key');
var encrypted = cipher.update(text.toString(),'utf8','hex') + cipher.final('hex');
return encrypted;
}

function decrypt(text){
var decipher = crypto.createDecipher('aes-256-cbc','secret key');
var decrypted = decipher.update(text.toString(),'hex','utf8') + decipher.final('utf8');
return decrypted ;
}

module.exports.encrypt = encrypt;
module.exports.decrypt = decrypt;

当我尝试解密未加密的内容(例如解密('test'))时,它会抛出以下错误:

crypto.js:292
var ret = this._binding.final();
^
TypeError: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
at Decipher.Cipher.final (crypto.js:292:27)

我也尝试使用缓冲区但没有成功,并且无法通过互联网找到任何解决方案。

真正的问题是我用它来解密 cookie 值。如果黑客创建一个值为“test”的假 cookie,它将使我的程序崩溃。

最佳答案

AES-CBC(无密文窃取)的输出始终是 16 字节(32 个十六进制字符)的倍数。由于您根本不提供十六进制字符(“测试”),并且字符串不是 32 个十六进制字符的倍数,因此您将始终看到错误。

所以这个:

000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F

例如是有效的。

所以你需要检查你得到的内容是否包含正确的字符并且长度是否正确。为了确保您不会收到任何填充或内容相关的错误,您需要在末尾放置一个通过密文计算得出的(十六进制编码的)HMAC 值。然后首先检查编码、长度,然后检查 HMAC。如果 HMAC 正确,您可以放心,解密后的明文不会包含任何无效信息。

关于node.js - Nodejs 使用加密解密错误最终 block 长度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111388/

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