Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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
Python 使用OpenSSL解密Ruby中的数据_Python_Ruby_Encryption_Openssl - Fatal编程技术网

Python 使用OpenSSL解密Ruby中的数据

Python 使用OpenSSL解密Ruby中的数据,python,ruby,encryption,openssl,Python,Ruby,Encryption,Openssl,我用Python编写了以下代码,效果很好。它使用mcrypt模块对变量加密的_数据中的数据进行解密。我想在Ruby中执行相同的操作。因此,我需要openssl模块。不幸的是,Ruby版本不起作用。这就是错误: `final': bad decrypt (OpenSSL::Cipher::CipherError) 编辑 我为您创建了一个GitHub存储库来测试这一点。在此处下载源代码: 编辑2 错误解密错误不再出现。我通过设置d.padding=0解决了这个问题。问题是:解密的数据仍然不正确。我

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

`final': bad decrypt (OpenSSL::Cipher::CipherError)
编辑 我为您创建了一个GitHub存储库来测试这一点。在此处下载源代码:

编辑2
错误解密
错误不再出现。我通过设置
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
需要“base64”
需要“openssl”
encrypted_data=“占位符:这是加密的数据。”
key=Base64.decode64(“6vYJkO5beHNlwOm+aMqUTTzSpRw9jR3faHqu0wVoAG0=”)
iv=Base64.decode64(“ebuukuv4+DzDbWsvQi/ZA==”)
d=OpenSSL::Cipher::AES128.new:CBC
d、 解密
d、 填充=0
d、 钥匙
d、 iv=iv

decrypted_data=d.update(encrypted_data)我发现Ruby中缺少OpenSSL集成,对于加密工作,通常比mcrypt更麻烦(api更难看/配置上的约定更少)

如果您在python中成功地使用了mcrypt,为什么不在ruby中也使用mcrypt呢

类似于:

require 'rubygems'
require 'mcrypt'
crypto = Mcrypt.new("rijndael-128", :cbc, key, iv)
decrypted_data = crypto.decrypt(encrypted_data)
在你的情况下应该有用


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

解密不是解码。密文包含随机字节,因此不应直接与字符串进行转换。加密的数据源是什么?是Python的吗?@owlstead是的,你说得对!该程序对数据进行加密。我相应地修改了代码。@tsundoku数据是从不同的服务器加载的。我不知道用哪种编程语言来加密数据。为什么这很重要?有两个设置需要调整,例如,如果您将
d.padding=0
,从这里开始:您是一个天才!这正是我想要的。你知道mcrypt和openssl之间在性能上是否有差异吗?哈哈,谢谢:)我很高兴这有帮助:)我不知道性能上的差异,但它们都是C绑定的lib,所以mcrypt的性能应该很好。在一个拥有700k用户的实时系统中,我们使用ruby mcrypt对大约1000万条记录进行加密,在性能上没有遇到任何瓶颈