使用OpenSSL在Ruby中解密数据

0 投票
1 回答
1184 浏览
提问于 2025-04-17 21:11

我有一段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)

Ruby

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 个回答

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)

这应该适合你的情况。

我今天或明天可以进一步解释这个答案,不过我现在得先去旅行。

撰写回答