Ruby OPENSSL AES128 CBC дешифрование со случайным iv не работает - PullRequest
0 голосов
/ 24 июня 2019

Я использую довольно простой скрипт 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 Ответ

1 голос
/ 24 июня 2019

Вы используете другой, случайный IV для расшифровки. Это значение должно быть одинаковым. То есть вы его захватываете при шифровании:

iv = cipher.random_iv

Затем вы расшифровываете это:

cipher.iv = iv

Тогда он правильно расшифровывается. Чтобы расшифровка прошла успешно, вам нужна та же пара ключ + IV.

...