Ruby on Rails 中的 DES3 解密
我的 RoR 服务器接收一个字符串,该字符串在 C++ 应用程序中使用 des3 和 base64 编码进行加密。
密码对象的创建方式如下:
cipher = OpenSSL::Cipher::Cipher::new("des3")
cipher.key = key_str
cipher.iv = iv_str
key_str 和 iv_str:是加密算法的密钥和初始化向量的字符串表示形式。它们对于 RoR 和 C++ 应用程序是相同的。
RoR 端的代码如下:
result = ""
result << cipher.update( Base64.decode64(message) )
result << cipher.final
执行最后一行代码后,出现异常
OpenSSL::CipherError (bad decrypt)
这里出了什么问题?有什么想法吗?
My RoR server receives a string, that was encrypted in C++ application using des3 with base64 encoding
The cipher object is created so:
cipher = OpenSSL::Cipher::Cipher::new("des3")
cipher.key = key_str
cipher.iv = iv_str
key_str and iv_str: are string representations of key and initialization vector for encryption algorithm. They are the same for RoR and C++ application.
The code on the RoR side is following:
result = ""
result << cipher.update( Base64.decode64(message) )
result << cipher.final
After executing the last line of code, i get an exception
OpenSSL::CipherError (bad decrypt)
What is wrong here ? Any ideas ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OpenSSL::Cipher 指出:
在您的具体情况下,省略对 cipher.decrypt 的调用会导致出现错误解密错误,如您所见。
以下示例纠正了该问题并显示了预期的行为:
The documentation for OpenSSL::Cipher states:
In your specific case, omitting the call to
cipher.decrypt
causes abad decrypt
error, as you've seen.The following example corrects that problem and exhibits the expected behavior:
它包装了标准 Ruby OpenSSL 库并允许您使用它的任何算法。
It wraps the standard Ruby OpenSSL library and allows you to use any of its algorithms.