相互運用可能な暗号化システムをセットアップしようとしているときに、軽い「概念実証」中に奇妙な状況に遭遇しました。
私はRubyで次のコードを書きました:
- ファイルシステム上のダミーテキストファイルから暗号化されたファイルを作成します
- 暗号化されたファイルを復号化する
- 元のファイルと比較して、同じかどうかを確認します
コードは次のとおりです。
require 'openssl'
require 'base64'
# Read the dummy file
data = File.read("test.txt")
# Create an encrypter
cipher = OpenSSL::Cipher::AES.new(256, :CBC)
cipher.encrypt
key = "somethingreallyreallycomplicated"
cipher.key = key
# Encrypt and save to a file
encrypted = cipher.update(data) + cipher.final
open "encrypted.txt", "w" do |io| io.write Base64.encode64(encrypted) end
# Create a decrypter
decipher = OpenSSL::Cipher::AES.new(256, :CBC)
decipher.decrypt
decipher.key = key
# Decrypt and save to a file
encrypted_data = Base64.decode64(File.read("encrypted.txt"))
plain = decipher.update(encrypted_data) + decipher.final
open "decrypted.txt", "w" do |io| io.write plain end
# Compare original message and decrypted message
puts data == plain #=> true
すべてが正常に機能し、このスクリプトは「true」を出力します
次に、opensslコマンドラインを使用して、次のコマンドでファイルを復号化しようとしました。
openssl aes-256-cbc -d -a -in encrypted.txt -k somethingreallyreallycomplicated
しかし、私は得ました:bad magic number
どうして?