【问题标题】:Decrypt Data in Ruby using OpenSSL使用 OpenSSL 在 Ruby 中解密数据
【发布时间】:2014-04-09 17:30:47
【问题描述】:

我在 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

【问题讨论】:

  • 解密不是解码。密文包含随机字节,因此不应直接将其转换为字符串。
  • 你的加密数据源是什么?它来自 Python 吗?
  • @owlstead 是的,你是对的!该程序会破坏数据。我相应地更改了代码。
  • @tsundoku 数据是从不同的服务器加载的。我不知道使用哪种编程语言来加密数据。为什么这很重要?
  • 有几个设置需要调整,例如如果你设置d.padding = 0,从这里:stackoverflow.com/questions/19661508/…

标签: python ruby encryption openssl


【解决方案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)

应该适用于您的情况。

我可以在今天晚些时候或明天继续回答这个问题,先去旅行

【讨论】:

  • 你是个天才!这正是我想要的。你知道mcrypt和openssl在性能上是否存在差异吗?
  • 大声笑,谢谢 :) 我很高兴它有帮助 :) 我不知道性能差异,但它们都是 C 绑定库,所以 mcrypt 性能应该相当不错。我们使用 ruby​​-mcrypt 在拥有 70 万用户的实时系统中加密了大约 1000 万条记录,并且我们没有遇到任何性能瓶颈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 2019-04-13
  • 2014-02-24
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多