Эквивалент «openssl_encrypt» в Ruby

Я пытаюсь преобразовать этот PHP-код в Ruby, но результат не тот. Что я делаю неправильно?

PHP

$iv = str_repeat('0', 16);
$passphrase = str_repeat('0', 32);
$encrypted = openssl_encrypt('Hello', 'AES-256-CBC', $passphrase, 0, $iv);

echo $encrypted; // => lfbW8JcPq6dkEnmY0hG7Vw==

Рубин

cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.iv = '0' * 16
cipher.key = '0' * 32
encrypted = cipher.update('Hello') + cipher.final

puts encrypted # => \x95\xF6\xD6\xF0\x97\x0F\xAB\xA7d\x12y\x98\xD2\x11\xBBW
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Результат в основном тот же.

Если вы попытаетесь закодировать AES 256 CBC, вы можете перейти по этой ссылке: '%7D,%7B'option':'UTF8','string':'0000000000000000'%7D,'CBC','Raw','Hex',%7B'option':'Hex','string': ''%7D)&input=SGVsbG8

Как видите, я закодировал "hello" в AES CBC с вашим ключом и IV (оба в UTF8)

Результатом в формате HEX является 95f6d6f0970faba764127998d211bb57, который в основном соответствует строке Rails за вычетом управляющей последовательности \x

Теперь строка PHP немного отличается, но это потому, что она была закодирована BASE 64.

Вы можете зайти сюда https://base64.guru/converter/encode/hex и скопировать 95f6d6f0970faba764127998d211bb57 в верхнее поле, результат будет lfbW8JcPq6dkEnmY0hG7Vw==

РЕДАКТИРОВАТЬ

Просто обратите внимание, что строка Rails немного отличается от Hex, предоставленной CyberChef, в последних символах. Может быть, кто-то может дать более подробную информацию о том, что нотация Rails немного отличается от HEX, вместе с escape-последовательностью \x. Я читал, что это характерно для языка C (Ruby закодирован на C, что может объяснить нотацию C с помощью \x).

Ответ принят как подходящий

Я предлагаю вам использовать Base64 # encode64, чтобы получить тот же результат, что и в вашем примере php.

require 'Base64'
puts Base64.encode64(encrypted) # => lfbW8JcPq6dkEnmY0hG7Vw==

Другие вопросы по теме