NodeJS Crypto与CryptoJS使用aes-256-cfb8加密结果不一致求解
问题根因
- 输出格式配置错误:你当前使用的
CryptoJS.format.OpenSSL会在密文前添加Salt前缀,和NodeJS Crypto直接输出原始密文转Base64的逻辑完全不匹配 - CFB反馈段大小不匹配:NodeJS侧使用的
aes-256-cfb8是8位反馈段的CFB模式,CryptoJS默认的CryptoJS.mode.CFB为128位反馈段,参数不匹配导致加密结果不一致
修复后的check3()方法代码
public check3(valueToEncrypt: string, secretKey: string): void { const hash = CryptoJS.MD5(secretKey); const md5Key: string = hash.toString(CryptoJS.enc.Hex) console.log("MD5 Value: ", md5Key); const IV11 = CryptoJS.enc.Utf8.parse(Test3.DEFAULT_IV); const key11 = CryptoJS.enc.Utf8.parse(md5Key); const data = CryptoJS.enc.Utf8.parse(valueToEncrypt); const enc1 = CryptoJS.AES.encrypt(data, key11, { iv: IV11, mode: CryptoJS.mode.CFB, padding: CryptoJS.pad.NoPadding, segmentSize: 8 // 新增配置:指定CFB模式为8位反馈段,对应aes-256-cfb8 }); // 修改输出逻辑:直接取原始密文转Base64,移除OpenSSL格式配置 console.log("Cipher text11: ", enc1.ciphertext.toString(CryptoJS.enc.Base64)); }
修复后运行输出的密文将和NodeJS Crypto侧的结果完全一致。
内容的提问来源于stack exchange,提问作者Sambit
相关产品推荐
相关产品推荐

