Приветствую! В общем задача - заменить mcrypt_encrypt имеющийся не во всех конфигурациях php (нет возможности подгрузить библиотеку для этого) на шелловую команду вокруг openssl (которую можно выполнить на имеющейся конфигурации). Предполагается что результат должен быть идентичным.
Но пока не получается - прошу помочь.
(полагаю проблема в упаковке ключа и вектора в hex.. в php это делается для передачи в mcrypt а в shell_exec непонятно как передать верно ключ и вектор, либо алгоритмы не совсем совпадающие но нужен результат аналогичный php)
<?php
# --- ШИФРОВАНИЕ ---
$key = pack('H*', "189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54");
echo "Ключ: " . $key . "\n";
$key_size = strlen($key);
echo "Длина ключа: " . $key_size . "\n";
$plaintext = "This string was must be encrypted";
echo "Исходник: " . $plaintext . "\n";
$iv = pack('H*', "e4554c4564a5454cc45654a45654ce44");
echo "Инициализирующий вектор: " . $iv . "\n";
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
$ciphertext_base64 = base64_encode($ciphertext);
echo "\n"."Зашифровано:".$ciphertext_base64 . "\n\n";
# --- ДЕШИФРОВКА ---
$ciphertext_dec = base64_decode($ciphertext_base64);
$iv_dec=$iv;
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo "Расшифровано:".$plaintext_dec . "\n\n";
$shkey="189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54";
$shiv="e4554c4564a5454cc45654a45654ce44";
$cmd='echo '.$plaintext.' | openssl aes-128-cbc -base64 -nosalt -a -k '.$shkey.' -iv '.$shiv;
echo "Command:".$cmd."\n";
$output = shell_exec($cmd);
echo "\n"."Output:$output"."\n";
?>