用PHP加密的Openssl需要在Ruby中解密

r3b*_*00t 5 php ruby encryption openssl cryptography

在我们的应用程序中,我们从外部服务器获取加密文本 此文本已openssl在php中加密.

当我试图解密我的Ruby代码中的文本时,我收到以下错误消息:

OpenSSL::Cipher::CipherError: wrong final block length
Run Code Online (Sandbox Code Playgroud)

我在Stackoverflow上阅读了几个解决方案,并建议在代码中添加以下行cipher.padding = 0.但添加后padding = 0,我得到了不同的错误:

OpenSSL::Cipher::CipherError: data not multiple of block length
Run Code Online (Sandbox Code Playgroud)

下面是我编写的用于解密代码的粗略脚本.

require 'openssl'
require 'digest/sha1'
require 'base64'

encrypted = "VaZYJzn9QVEQIH4fmtA1Cg=="
key = "my_secret_key"

cipher = OpenSSL::Cipher::Cipher.new("aes-128-ecb")

cipher.decrypt
cipher.padding = 0

cipher.key = key

decrypted = cipher.update(encrypted)
decrypted << cipher.final
puts Base64.decode64(decrypted)
Run Code Online (Sandbox Code Playgroud)

如果我使用加密文本,Ruby那么我可以很容易地解密它.我有问题解密加密的代码php.有什么方法可以使PHP和Ruby之间的加密和解密兼容.

abo*_*yun 1

只需更改您的调用方式即可。

decrypted << cipher.finaldecrypted = cipher.update(encrypted) + cipher.final

可以得到像这样的字符串

<GF\x8F\xDC\x91\xE1ew\xB1\x1C\xE8\xF8V\xA0\x99g\x01C\xCDF\xD6\v\x841l\x13\xA6\x9496{

最后,引用 Ruby Doc 的一句话:除非你绝对确定你绝对需要它,否则你永远不应该使用 ECB 模式