Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加密Js和Rails中的AES加密给出了不同的结果_Javascript_Ruby On Rails 3_Encryption_Aes - Fatal编程技术网

Javascript 加密Js和Rails中的AES加密给出了不同的结果

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

我正在尝试使用AES-256-CBC和Crypto Js(在客户端)以及rails中的OpenSSL(在服务器端)对文本进行加密,它们给了我不同的结果。这解释了为什么我不能在服务器端解码加密文本,而在客户端解码加密文本

我是这样做的:

客户端(加密JS)-编辑 服务器端(Rails OpenSSL)-已编辑 有人知道我做错了什么吗?我只是在这一点上被难住了

非常感谢你的帮助……谢谢

保罗

在台词中:

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)