我在服务器端使用RoR并向JS客户端发送一些加密数据。对于ROR,我使用的是OpenSSl加密技术。
`c= OpenSSL::Cipher::Cipher.new('aes-256-cbc')
c = cipher.encrypt
c.key = Digest::SHA256.digest(key)
Base64.strict_encode64(c.update(value.to_s) + c.final)
`
这是我在ROR中加密的代码
`var cipherParams:any = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(encrypted_data)
});
var digest = CryptoJS.SHA256(key.toString(CryptoJS.enc.Utf8));
let bytes = CryptoJS.AES.decrypt(cipherParams, digest, {iv: iv});
bytes.toString(CryptoJS.enc.Utf8);
`
这是我的JS解密逻辑
当我从服务器加密某些键值对数据时,我无法解密它。我收到此错误
MalFormed Utf8
但当我尝试解密单个值时,如:“5678”我得到了正确的价值。如果我将 CryptoJS.enc.Utf8 更改为 CryptoJS .enc.Latin1 我收到了一些不可读的值,但没有显示错误。
我认为将其转换为UTF8会产生问题。但为什么?
我尝试了很多解决方案。我正在使用正确的密钥和摘要和IV,我已多次检查它,我也发送正确的字符串键和值。