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

时间:2016-01-18 17:15:11

标签: php ruby encryption openssl cryptography

在我们的应用程序中,我们从外部服务器获取加密文本。此文本已使用php中的(global-linum-mode) (setq-default dotspacemacs-line-numbers 'relative) 加密。

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

openssl

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

padding = 0

下面是我编写的解密代码的粗略脚本。

OpenSSL::Cipher::CipherError: data not multiple of block length

如果我使用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) 加密文本,那么我可以轻松解密它。我在解密在Ruby中加密的代码时遇到问题。有什么方法可以在php和Ruby之间兼容加密和解密。

1 个答案:

答案 0 :(得分: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模式,除非你绝对确定你绝对需要它