Node.js Crypto解密报错ERR_OSSL_WRONG_FINAL_BLOCK_LENGTH求助
解决解密错误(ERR_OSSL_WRONG_FINAL_BLOCK_LENGTH)
核心问题:加解密流程不匹配
你的加密和解密步骤的格式转换逻辑不一致,导致解密时输入格式错误,引发块长度不匹配的问题。
错误点分析
- 加密流程:将明文转成
hex格式密文,再把hex字符串转成base64存储。 - 解密流程:你错误地将
base64解码后的buffer转成utf8字符串,再用base64格式解析,这和加密步骤完全反向错误。
修正后的解密函数
替换原有的decryptData函数:
// Decrypt data const decryptData = (encryptedData) => { try { // 1. 将base64编码的密文解码成buffer,再转成hex字符串(对应加密时的hex步骤) const buff = Buffer.from(encryptedData, 'base64'); const hexStr = buff.toString('utf8'); const decipher = crypto.createDecipheriv(ENCRYPTION_METHOD, key, encryptionIV); // 2. 用hex格式解析密文,输出utf8明文 const decrypted = decipher.update(hexStr, 'hex', 'utf8') + decipher.final('utf8'); return decrypted; } catch (error) { console.error('Decryption Error:', error); return null; } }
额外检查项
- 验证加密算法配置:确保
ENCRYPTION_METHOD环境变量的值是aes-256-cbc,你的key是32字节(256位)、IV是16字节,完全匹配该算法要求,使用其他算法会引发错误。 - 检查存储的密文完整性:确认数据库中存储的加密数据没有被截断、添加额外字符(如空格、转义符),数据损坏会导致解密失败。
- 环境变量一致性:确保加密和解密时使用的
SECRET_KEY、SECRET_IV完全一致,任何细微差异都会导致解密失败。
内容的提问来源于stack exchange,提问作者Jeshuwa Bradley
相关产品推荐
相关产品推荐

