我使用echo "test" | openssl enc -aes256 -salt -a -k test
解密代码:
def decrypt_string(b64_text, decryption_key)
encrypted_text = Base64.decode64(b64_text)
_header = encrypted_text[0, 8]
salt = encrypted_text[8, 8]
payload = encrypted_text[16..-1]
decipher = OpenSSL::Cipher.new('aes-256-cbc').decrypt
d_1 = OpenSSL::Digest::MD5.new(decryption_key + salt).digest
d_2 = OpenSSL::Digest::MD5.new(d_1 + decryption_key + salt).digest
decipher.key = (d_1 + d_2)
decipher.iv = OpenSSL::Digest::MD5.new(d_2 + decryption_key + salt).digest
decipher.update(payload) + decipher.final
end
但是当我打电话:decrypt_string('U2FsdGVkX1+5Sar5DYmbDtze7yvHKdq/ZuZIVnkImDc=', 'test')
我收到OpenSSL :: Cipher :: CipherError:错误的解密
我不能使用外部gem,也不想拨打操作系统电话。您如何使用内置的openssl库?
答案 0 :(得分:1)
如果我运行您的代码,它不会返回OpenSSL::Cipher::CipherError (bad decrypt)
错误,因此我认为b64_text
变量与您发布的变量不同。
您可以尝试在IRB中运行以下内容吗?
str = `echo "test" | openssl enc -aes256 -salt -a -k test`
decrypt_string(str, 'test')
错误仍然存在吗?