Как вы расшифровываете файл, созданный с помощью openssl в ruby? - PullRequest
0 голосов
/ 01 февраля 2019

Я создал файл, используя: 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: bad decrypt

Я не могу использовать внешние гемы и не хочу делать вызов ОС.Как вы используете встроенную библиотеку openssl?

1 Ответ

0 голосов
/ 01 февраля 2019

Если я запускаю ваш код, он не возвращает ошибку OpenSSL::Cipher::CipherError (bad decrypt), поэтому я думаю, что переменная b64_text отличается от той, которую вы опубликовали.

Можете ли вы попробовать запустить в IRB следующее:

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

Ошибка по-прежнему сохраняется?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...