Использование openssl_encrypt в php для шифрования данных, а затем поиск расшифровки данных в nodejs - требуемые размеры ключей кажутся разными? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть php-код:

openssl_encrypt($string, 'AES-256-CBC', $key, 0, $iv);

и мой код nodejs:

crypto.createDecipheriv('aes-256-cbc', 'key', 'iv')

Ключ в моем коде php составляет 64 символа при печати на консоль. Тем не менее, когда я использую тот же ключ для расшифровки своего кода в nodejs, это только радует, когда я использую 32 символа для своего ключа. Я попытался использовать только первые 32 символа ключа, который я использую в своем коде шифрования php, но он не работает. Кто-нибудь может объяснить, где я здесь не так? Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

32-байтовая длина ключа должна быть правильной для AES256. Создайте фиктивный ключ и распечатайте его на обоих концах для расследования. Весьма вероятно, что ваша проблема - это формат / кодировка вашего ключа. Например, 64 символа могут быть объяснены, если вы обрабатываете ключ в шестнадцатеричном формате. Для представления одного байта потребуется два символа.

Документация по этому openssl_encrypt не кажется слишком подробной, когда речь заходит о параметре key, но один из комментариев пользователей с высоким рейтингом предполагает, что ключ действительно должен быть в шестнадцатеричном формате: " Параметры IV и Key, передаваемые в командную строку openssl, должны быть в шестнадцатеричном представлении строки."http://php.net/manual/en/function.openssl-encrypt.php

Кажется, что сторона nodeJS более гибка в отношении формата, просто убедитесь, что ваш тип данных и кодировка соответствуют друг другу. https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv_options

EDIT:

Одна вещь, которую вы можете попробовать, - преобразовать эти 64 символа (скорее всего, все еще в шестнадцатеричном формате) в буфер на стороне узла, прежде чем передать его функции createDecipheriv. https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_array

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...