如何在ruby中解密使用openssl创建的文件?

时间:2019-01-31 23:45:23

标签: ruby openssl

我使用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库?

1 个答案:

答案 0 :(得分:1)

如果我运行您的代码,它不会返回OpenSSL::Cipher::CipherError (bad decrypt)错误,因此我认为b64_text变量与您发布的变量不同。

您可以尝试在IRB中运行以下内容吗?

str = `echo "test" | openssl enc -aes256 -salt -a -k test`
decrypt_string(str, 'test')

错误仍然存​​在吗?