Techioz Blog

Macコマンドラインを使用してRubyで暗号化されたzipを復号化する

概要

Mac 上で Ruby で暗号化されたファイルを復号化できないという問題に直面しています。

次の Ruby コードを使用して、AES 暗号化を使用して zip ファイルを暗号化しました。

require 'openssl'

key = OpenSSL::Cipher.new('AES-256-CBC').random_key
iv = OpenSSL::Cipher.new('AES-256-CBC').random_iv

key_hex = key.unpack('H*').first
iv_hex = iv.unpack('H*').first

puts OpenSSL::OPENSSL_LIBRARY_VERSION # OpenSSL 1.1.1t  7 Feb 2023
puts "Key: #{key_hex}"
puts "IV:  #{iv_hex}"

cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.key = key
cipher.iv = iv
binary = cipher.update(data) + cipher.final
binary.unpack1('H*')

次に、Mac OS ターミナルを使用して、作成されたバイナリ ファイルを復号化しようとしています。

$ openssl version
OpenSSL 1.1.1s  1 Nov 2022
$ openssl enc -aes-256-cbc -d -K <key_hex> -iv <iv_hex> -in encrypted > decrypted.zip

ただし、「不正な復号化」エラーが発生し、復号化できません。

bad decrypt
4705359360:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:612:

解決策を教えてください!

解決策

openssl コマンドで予期される正しいデータ表現を使用していることを確認する必要があります。暗号化されたデータは 16 進数でエンコードされたものではなく、生の形式であることが想定されます。

暗号化されたデータの 16 進数でエンコードされたバージョンをエンコードされたファイル (つまり、最後の Ruby ステートメントの結果) に入れたようです。代わりに、バイナリ変数の内容を暗号化されたファイル (つまり、前の Ruby ステートメントの結果) に入れます。