Я пытаюсь зашифровать данные с помощью PHP и командной строки openssl, ожидаю, что те же зашифрованные данные, но я получаю разные данные.
В Linux это моя версия openssl
OpenSSL> version
OpenSSL 1.0.2k-fips 26 Jan 2017
Я попытался передать 48 байтов данных, надеясь, что это может избежать заполнения. Но не повезло. Я заметил, что IV разные, поэтому попытался использовать IV = 905E17D5F5E4939D0000000000000000 в PHP-коде. Но я получил предупреждение openssl_encrypt (): длина передаваемого IV составляет 32 байта, что больше, чем 16, ожидаемое выбранным шифром, усеченное в
при использовании / без параметров -nosalt в командной строке.
<?php
// encrypt/decrypt string
$output = false;
$encrypt_method = "AES-256-CBC";
$key = '905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291';
$iv = '905e17d5f5e4939d';
$string = "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG";
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
echo $output;
?>
nEUDtXM7OQt32YEx778BgqZfocXrNNA9AihkioWZo9ri9p11DtxUpTFO30AHUk41F9PUBLu6YlYu/mdLcOZ3Cg==
где как openssl из командной строки linux:
echo "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG" |openssl enc -base64 -e -aes-256-cbc -K 905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291 -iv 905e17d5f5e4939d -nosalt -p
key=905E17D5F5E4939D48BD04FF47F9DE906375B87B67068B2CE5D1BBBBC8DCA291
iv =905E17D5F5E4939D0000000000000000
c4JHI/8SIQkx7GXM2SclOXhbmR9vYBFLHt/jY0x7pJou9J2INJBQMISRYH4CPjvy
QDeyOWpcEEN/N6FnSdF0EA==
что мне здесь не хватает? Как я могу убедиться, что и строка PHP и команда openssl будут использовать один и тот же IV / Key? Как можно убедиться, что отступы одинаковы в обоих случаях, если они есть? Я хочу видеть одинаковые результаты с обеих сторон.