openssl-encrypt, PHP против командной строки - как сделать IV одинаковыми - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь зашифровать данные с помощью 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? Как можно убедиться, что отступы одинаковы в обоих случаях, если они есть? Я хочу видеть одинаковые результаты с обеих сторон.

...