Мне нужно расшифровать данные, которые зашифрованы php с помощью алгоритма ‘rijndael-128-cbc’.
Теперь у меня проблема с преобразованием php-кода в ruby-код.
ruby OpenSSL :: Cipher не поддерживает rijndael-128-cbc, тогда я использую «aes-128-cbc».
Я слышал, что AES основан на шифре Rijndael, поэтому, я думаю, я могу преобразовать дешифрование с помощью rijndael-128-cbc ‘в AES-128-CBC.
enc = OpenSSL::Cipher.new "AES-128-CBC"enc.encrypt
puts enc.key_len
Это выход 16
Однако в php
echo mcrypt_get_key_size('rijndael-128', 'cbc')
это получает 32
Есть ли разница между «rijndael-128» и «AES-128-CBC»?
и как я могу преобразовать описание rijndael-128-cbc в ruby?
Я не разработчик Ruby, поэтому я не могу помочь вам с кодом ruby, но я могу дать вам несколько советов о Rijndael и расширении PHP mcrypt …
Да, AES основан на Rijndael-128, и поэтому Rijndael-128 и AES-128 — это одно и то же.
Важно отметить, что число в вариациях Рейндаэля относится к шифру размер блока, в то время как для AES — это размер ключа, так (например) Rijndael-192 НЕ является AES-192; AES всегда имеет размер блока 16 байтов или 128 бит.
При этом Rijndael-128 также может быть AES-192 и AES-256, разница только в размере ключа.
Как описано в руководстве по PHP для mcrypt_get_key_size()
функция возвращает максимальная длина ключа для поставляемого шифра …
AES-256 == Rijndael-128 with a 32-byte key
Вот почему он возвращает 32. Для AES-128 размер ключа, конечно, 16 — вы можете жестко его кодировать.
Надеюсь, это немного прояснит для вас.
Других решений пока нет …