You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:56:18