次のスクリプトが与えられた場合
require "openssl"
require "securerandom"
key = SecureRandom.random_bytes(32)
iv = SecureRandom.random_bytes(16)
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.encrypt
aes.key = key
aes.iv = iv
crypted = aes.update("a"*50)+aes.final
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.decrypt
aes.key = key
aes.iv = iv
puts aes.update(crypted)+aes.final
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.decrypt
aes.key = key
puts aes.update(crypted)+aes.final
次の出力が得られます(例):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
���y��f{�K~:y��aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
これらの CBC スタイルの XOR 操作、ブロック サイズのケアなどを自分で実行する必要がありますか? 復号化する必要がある文字列を渡して更新関数を呼び出すだけではない例は見つかりません。インプレース編集の問題を防ぐために、すべての文字列割り当てに .dup を追加しようとしました。ここで何が起こっているのですか?
環境: ruby 1.9.3p194 (2012-04-20 リビジョン 35410) [x86_64-linux]