使用crypto-js解密VB.NET生成的TripleDES加密数据失败如何解决?
问题根源
你之前的解密逻辑存在三个核心错误:
- 算法不匹配:对方使用的是*Triple DES(3DES)*加密,你先后误用了AES、单DES算法,完全不匹配
- 密钥生成逻辑错误:对方没有直接将Passphrase作为密钥,而是先对Passphrase做MD5哈希,将哈希结果作为3DES密钥,你直接将原始Passphrase作为密钥使用
- 密文解析错误:对方返回的密文是Base64编码格式,需要先正确解析后再传入解密函数
正确解密代码
首先确保你引入的CryptoJS包含所有依赖模块:MD5、TripleDES、ECB模式、PKCS7填充,完整解密代码如下:
// 传入你拿到的密文和对方提供的Passphrase function decrypt3DES(message, Passphrase) { // 步骤1:生成符合要求的3DES密钥:对Passphrase做MD5哈希 const md5Key = CryptoJS.MD5(CryptoJS.enc.Utf8.parse(Passphrase)); // 步骤2:解析Base64格式的密文 const cipherText = CryptoJS.enc.Base64.parse(message); // 步骤3:3DES解密,配置对应参数 const decryptedData = CryptoJS.TripleDES.decrypt( { ciphertext: cipherText }, md5Key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ); // 步骤4:将解密结果转成UTF8明文 return decryptedData.toString(CryptoJS.enc.Utf8); } // 调用示例 const plainText = decrypt3DES("你拿到的加密密文", "对方提供的Passphrase"); console.log(plainText);
注意事项
- 如果是通过CDN引入CryptoJS,要确保引入完整包,或者依次引入核心库、MD5、3DES、ECB模式、PKCS7填充的对应JS文件,缺失模块会导致解密失败
- 确认Passphrase和加密方提供的完全一致,大小写、特殊字符、空格都不能有差异,否则MD5哈希结果错误无法解密
- 确认拿到的密文是完整的Base64字符串,没有被接口转义、截断或者额外拼接字符
内容的提问来源于stack exchange,提问作者Danielle
相关产品推荐
相关产品推荐

