Я начинаю со следующего кода шифрования C#
и хочу расшифровать с помощью Ruby
. Моя проблема в том, что я не знаю, как установить режим заполнения в Ruby/OpenSSL
. Мне нужно использовать PKCS7
.Как установить режим заполнения с расшифровкой/шифрованием Ruby/OpenSSL?
C# шифрования
System.Security.Cryptography.Aes c = new System.Security.Cryptography.AesManaged();
c.Mode = CipherMode.CBC;
c.Padding = PaddingMode.PKCS7; # <-- how to set this in Ruby world?
c.KeySize = 256;
c.BlockSize = 128;
c.Key = key;
c.IV = iv;
...
Рубин дешифрования
d = OpenSSL::Cipher.new('AES-128-CBC') # oops, this should have been AES-256-CBC
d.decrypt
d.key = key
d.iv = iv
...
настоящее время я использую Ruby 1.9.2
, но может использовать любую версию необходимо.
Спасибо за ваш ответ. Я изменил шифр, как вы предложили, и расшифровка * кажется * успешной, хотя я пока не могу подтвердить это, поскольку у меня возникают проблемы с раздуванием дешифрованных данных (возможно, проблемы между 'C#' и 'Ruby' re: 'Zlib', сдувание и раздувание). Во всяком случае, что касается заполнения Ruby по умолчанию, я нашел [ответ SO, говорящий, что PKCS5 по умолчанию] (http://stackoverflow.com/a/12611287/664833). [Документация] (http://www.ruby-doc.org/stdlib-1.9.2/libdoc/openssl/rdoc/OpenSSL/Cipher.html) неактуален об этой детали (или, по крайней мере, я ее не нашел). – user664833
Статья в вики на дополнении говорит: «Заполнение PKCS5 - это то же самое, что и PKCS7, за исключением того, что технически его можно использовать только для колодок с 64-битными блоками. На практике эти два используются взаимозаменяемо». (http://en.wikipedia.org/wiki/Padding_(cryptography)). Таким образом, AES не может использовать дополнение PKCS5 по определению, поскольку размер блока фиксирован до 128 (> 64) –
Тем не менее это будет полезно для некоторых людей (например, me), если этот ответ обновлен, чтобы указать, как указать заполнение и другие параметры в рубине. Спасибо за ваш ответ –