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

使用Node.js crypto模块解密时遇error:1C800064错误求助

解密报错Error: error:1C800064:Provider routines::bad decrypt的解决方法

核心问题:解密时编码参数传递错误

你的解密代码中,decipher.update()和decipher.final()的编码参数完全写反了:

  • 加密流程是:utf8明文 → hex密文,对应cipher.update(message, 'utf8', 'hex')
  • 解密流程需要反向:hex密文 → utf8明文,但你写成了utf8 → hex,导致解密时无法正确解析密文,触发"bad decrypt"错误。

修复后的解密代码

const crypto = require('crypto');

// 从加密模块获取的密钥
const key = '2e6c7f292306cd6518aff5ff99dba46e';
// 注意:和加密端使用完全一致的IV(当前示例用全0,仅作演示)
const iv = Buffer.alloc(16).fill(0);
// 从加密模块获取的密文
const encryptedMessage = '187145680cd07efad27ea86dbdbf7a0e7434dd5e753af1c427a147d621d7bb9980ac4ef633ec2504b8318e000757ed42';

// 创建解密器
const decipher = crypto.createDecipheriv('aes-128-cbc', Buffer.from(key, 'hex'), iv);

// 修正编码参数:将hex格式的密文转换为utf8明文
let decryptedMessage = decipher.update(encryptedMessage, 'hex', 'utf8');
// 最终输出也要指定utf8编码
decryptedMessage += decipher.final('utf8');

console.log('Decrypted Message:', decryptedMessage);
console.log('Key:', key);

额外的安全最佳实践

  1. IV必须随机生成:AES-CBC模式下,IV不能固定为全0(当前代码仅作演示)。加密时应使用const iv = crypto.randomBytes(16)生成随机IV,然后将IV和密文一起传递给解密端(IV无需保密,可以明文存储/传输)。
  2. 添加消息认证:建议对加密后的密文生成HMAC认证码,解密前先验证HMAC,防止密文被篡改导致解密失败或伪造内容。

内容的提问来源于stack exchange,提问作者codeKar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:10