openssl_decrypt для aes-128-cbc не работает - PullRequest
0 голосов
/ 31 мая 2018

Я работаю над расшифровкой некоторого контента из API.Они также предоставили команду.Ниже приведена некоторая команда, которая прекрасно работает:

openssl enc -d -aes-128-cbc -K 422943374a3568755d7c527f6e472132 -iv 00000000000000000000000000000000 -nopad -in <(echo 'D5fiXKI4ie4c69gcCwM4/p414yrYtH9np+piNoqZASbkUnHAvbB4norHz6d6uzJmIg1sULhHFmfQTkvpw0tIEVmNcjyP6j2LK8zXYzohtNlsqBHx5v4xHEIyCcvfbMJddd5hs97jqkUtHuQyer2GdfDKZseaGgpXJ75GK7uKFPkbJ3wgQ6A0Q7q2tbBYeXEDmRMO6OhWeHgrezQOcyjcdOQk50SjMuaSb9IRimwagXamiXRg0LyTzA18a0SuqtbKCNgXnmhf39YxJUudkRmcMQ==' | base64 --decode)

Мне нужно кодировать на PHP, поэтому мне нужно перевести то же самое на PHP, и вот что я написал на PHP:

$encodedStr = "PYroeIibeYwy/waD3opLw6yWT6Wfv3AhBKhQpoR+6qT9gx/bTDdR9QIfXcVURoQ2QlTl8L+JZX4Ije8M+FAQOxVmEXAmyUpzLgeg7aRCA6iiJbav/W3xW0BWb3D3QELjKTN4KRB2FdM7G5eIIfvjpeySLxQ3h7eL16nQf+1rms4VoVsBaeO8aU+Zy9saKZR4oL+k40m6tjtvtXryg7sWcmUgdonP/Jg4osESrY3MmGl7qXSpJC+v4g3iOY7s8NwywSN9q2Id7P0IaVtb5AFOEQ==";
$secretHash = ",MF-,2Y*s8DoYCFI";
$encryptionMethod = "AES-128-CBC";
$iv = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

$encrypted = base64_decode($encodedStr);

$hexKey = strToHex($secretHash);

$response = openssl_decrypt($encodedStr, $encryptionMethod, $hexKey, OPENSSL_ZERO_PADDING, $iv);

И в ответ я получаю строку нечетных символов вместо фактической строки, которую я могу получить из команды openssl в командной строке.

Согласно openssl_decrypt документации:

Принимает строку в кодировке raw или base64 и расшифровывает ее, используя заданный метод и ключ.

Я также попытался указать декодированное значение base64 в первом аргументе этой функции.Метод шифрования тоже кажется нормальным.И заполнение нулями, как сказано в документе API.Единственное, что я считаю сомнительным, это ноль iv.Дайте мне знать, если я делаю ноль IV неправильно.Я пытался не использовать IV, но безрезультатно.Или также дайте мне знать, если я делаю что-то не так.

1 Ответ

0 голосов
/ 31 мая 2018

openssl_decrypt ожидает, что ключ будет двоичным, а не шестнадцатеричным.Вам не нужно конвертировать $ secretHash в гекс и просто передавать его как есть.

$response = openssl_decrypt($encodedStr, $encryptionMethod, $secretHash, OPENSSL_ZERO_PADDING, $iv);
...