在我们的应用程序中,我们从外部服务器获取加密文本。此文本已使用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之间兼容加密和解密。
答案 0 :(得分:1)
只需改变你的召唤方式即可。
从decrypted << cipher.final
到decrypted = 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模式,除非你绝对确定你绝对需要它