使用OpenSSL解密Ruby中的数据

时间:2014-03-06 20:33:57

标签: python ruby encryption openssl

我在Python中有以下代码,效果很好。它使用mcrypt模块解密变量encrypted_data中的数据。我想在Ruby中执行相同的操作。因此我需要openssl模块。不幸的是,Ruby版本不起作用。这是错误:

`final': bad decrypt (OpenSSL::Cipher::CipherError)

修改 我为您创建了一个GitHub存储库来测试它。在此处下载源代码:github.com/ph3nx/ruby-decrypt

编辑2 bad decrypt错误不再出现。我通过设置d.padding = 0来修复此问题。问题是:解密的数据仍然不正确。我无法查看图片。

如果您需要有关我的系统或其他任何其他信息,请随时提出。任何帮助都非常感谢。谢谢!

的Python

import base64
import mcrypt

encrypted_data = "placeholder: This is the encrypted data."

key = base64.b64decode("6vYJkO5beHNlwOm+aMqUTTzSpRw9jR3faHqu0wVoAG0=")
iv = base64.b64decode("EbuuKuVF4+DzDbWsvQi/ZA==")

m = mcrypt.MCRYPT("rijndael-128", "cbc")
m.init(key, iv)
decrypted_data = m.decrypt(encrypted_data)

红宝石

require 'base64'
require 'openssl'

encrypted_data = "placeholder: This is the encrypted data."

key = Base64.decode64("6vYJkO5beHNlwOm+aMqUTTzSpRw9jR3faHqu0wVoAG0=")
iv = Base64.decode64("EbuuKuVF4+DzDbWsvQi/ZA==")

d = OpenSSL::Cipher::AES128.new :CBC
d.decrypt
d.padding = 0
d.key = key
d.iv = iv
decrypted_data = d.update(encrypted_data) << d.final

1 个答案:

答案 0 :(得分:1)

我发现Ruby中缺少OpenSSL集成,而且加密工作通常比mcrypt更加繁琐(对于配置来说更简单的api /更少的约定)。

如果您在python中成功使用mcrypt,为什么不在ruby中使用mcrypt呢? https://github.com/kingpong/ruby-mcrypt

以下内容:

require 'rubygems'
require 'mcrypt'
crypto = Mcrypt.new("rijndael-128", :cbc, key, iv)
decrypted_data = crypto.decrypt(encrypted_data)

应该适用于您的情况。

我可以在今天晚些时候或明天晚些时候延长这个答案,先做一些旅行