给定以下脚本
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]