Как заставить Ruby AES-256-CBC и PHP MCRYPT_RIJNDAEL_128 хорошо играть вместе

создание данных для отправки из стека Ruby в стек PHP. Я'используя библиотеку OpenSSL :: Cipher на стороне Ruby и 'Mcrypt» библиотека в PHP. Когда я шифрую, используяAES-256-CBC» (256-битный размер блока) в Ruby Мне нужно использовать MCRYPT_RIJNDAEL_128 (128-битный размер блока) в PHP для его расшифровки. Я подозреваю, что код Ruby не работает, потому что cipher.iv_len равен 16; Я считаю, что это должно быть 32:

>> cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
=> #
>> cipher.key_len
=> 16
>> cipher.iv_len
=> 16
>> cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
=> #
>> cipher.key_len
=> 32
>> cipher.iv_len
=> 16

Так вот'мой тест Что касается Ruby, сначала я генерирую ключ и iv:

>> cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
>> cipher.encrypt
>> iv = cipher.random_iv
>> iv64 = [iv].pack("m").strip
=> "vCkaypm5tPmtP3TF7aWrug=="
>> key = cipher.random_key
>> key64 = [key].pack("m").strip
=> "RIvFgoi9xZaHS/0Bp0J9WDRyND6Z7jrd3btiAfcQ8Y0="

Затем я использую эти ключи для шифрования:

>> plain_data = "Hi, Don, this is a string."
>> cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
>> cipher.encrypt
>> cipher.key = Base64.decode64(key64)
>> cipher.iv = Base64.decode64(iv64)
>> encrypted_data = cipher.update(plain_data)
>> encrypted_data < cipher.final
>> crypt64 = [encrypted_data].pack("m").strip
=> "5gfC/kJcnAV2fJI0haxnLcdraIKWgtu54UoznVxf8K0="

Ответы на вопрос(4)

Ваш ответ на вопрос