Javascript 加密Js和Rails中的AES加密给出了不同的结果
我正在尝试使用AES-256-CBC和Crypto Js(在客户端)以及rails中的OpenSSL(在服务器端)对文本进行加密,它们给了我不同的结果。这解释了为什么我不能在服务器端解码加密文本,而在客户端解码加密文本 我是这样做的: 客户端(加密JS)-编辑 服务器端(Rails OpenSSL)-已编辑 有人知道我做错了什么吗?我只是在这一点上被难住了 非常感谢你的帮助……谢谢 保罗在台词中:Javascript 加密Js和Rails中的AES加密给出了不同的结果,javascript,ruby-on-rails-3,encryption,aes,Javascript,Ruby On Rails 3,Encryption,Aes,我正在尝试使用AES-256-CBC和Crypto Js(在客户端)以及rails中的OpenSSL(在服务器端)对文本进行加密,它们给了我不同的结果。这解释了为什么我不能在服务器端解码加密文本,而在客户端解码加密文本 我是这样做的: 客户端(加密JS)-编辑 服务器端(Rails OpenSSL)-已编辑 有人知道我做错了什么吗?我只是在这一点上被难住了 非常感谢你的帮助……谢谢 保罗在台词中: key = CryptoJS.enc.Hex.parse("abcdefghijklmnopqrs
key = CryptoJS.enc.Hex.parse("abcdefghijklmnopqrstuvwxyz012345")
字符串“abcdefghijklmnopqrstuvwxyz012345”不是十六进制表示法。
首先,根据文档CryptoJS根据密钥大小选择128/192/256。当从十六进制解析回二进制时,该密钥为16字节,这意味着它将使用AES-128-CBC进行编码。因此,在Ruby端选择AES-256-CBC是不正确的 此外,密钥在ruby端没有进行十六进制解码。通过这些更改,代码如下所示:
iv = Base64.decode64("kT+uMuPwUk2LH4cFbK0GiA==")
key = ["6476b3f5ec6dcaddb637e9c9654aa687"].pack("H*")
cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
cipher.encrypt
cipher.key = key
cipher.iv = iv
text = cipher.update("test") + cipher.final
encrypted_text = Base64.strict_encode64(text)
输出为“7Qu7/V7yXHt67wMOV0/1Tg=”。正是我们所期待的。谢谢cytinus。我更改了键和iv以确保使用十六进制表示法,但仍然没有得到相同的结果。还有什么我可能做错的吗?你知道了吗?@pwc有什么新消息吗?我给你发了一个答案。普华永道的原始代码有两处错误。thx@Paul Kehrer你救了我一天!这应该是公认的答案
key = CryptoJS.enc.Hex.parse("abcdefghijklmnopqrstuvwxyz012345")
iv = Base64.decode64("kT+uMuPwUk2LH4cFbK0GiA==")
key = ["6476b3f5ec6dcaddb637e9c9654aa687"].pack("H*")
cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
cipher.encrypt
cipher.key = key
cipher.iv = iv
text = cipher.update("test") + cipher.final
encrypted_text = Base64.strict_encode64(text)