随机iv的Ruby OPENSSL AES128 CBC解密不起作用

时间:2019-06-24 19:38:23

标签: ruby encryption openssl aes cbc-mode

我正在使用一个相当简单的加密/解密Ruby脚本,它似乎可以正常工作-但解密位破坏了消息的前几个字节。我想念什么?

代码如下:

key = OpenSSL::Random.random_bytes(16)
plain_text = "Some important txt we want to encrypt"
cipher = OpenSSL::Cipher::AES128.new(:CBC)
cipher.encrypt
cipher.key = key
cipher.random_iv
cipher_text = cipher.update(plain_text) + cipher.final

cipher = OpenSSL::Cipher::AES128.new(:CBC)
cipher.decrypt
cipher.key = key
cipher.random_iv
decrypted_plain_text = cipher.update(cipher_text) + cipher.final

puts "AES128 in CBC mode"
puts "Plain text: " + plain_text
puts "Cipher text: " + urlsafe_encode64(cipher_text)
puts "Decrypted plain text: " + decrypted_plain_text

结果:

AES128 in CBC mode Plain text: Some important txt we want to encrypt
Cipher text:
P2fdC7cApQvxHnfxSEfB2iJaueK3xRoj-NN3bDR8JheL_VPFYTDF_RxpLfBwoRfp
Decrypted plain text: �܇�Σ }w�D�A:xt we want to encrypt

1 个答案:

答案 0 :(得分:1)

您在解密中使用了不同的随机IV。此值必须相同。那就是您在加密时捕获它:

iv = cipher.random_iv

然后使用该密码解密

cipher.iv = iv

然后正确解密。您需要使用相同的密钥+ IV对才能使解密成功。