Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена mcrypt_encrypt (php) на openssl (shell_exec)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ArtyShock
Отправлено: 01 Апреля, 2018 - 00:51:27
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Приветствую! В общем задача - заменить mcrypt_encrypt имеющийся не во всех конфигурациях php (нет возможности подгрузить библиотеку для этого) на шелловую команду вокруг openssl (которую можно выполнить на имеющейся конфигурации). Предполагается что результат должен быть идентичным.

Но пока не получается - прошу помочь.

(полагаю проблема в упаковке ключа и вектора в hex.. в php это делается для передачи в mcrypt, а в shell_exec непонятно как передать верно ключ и вектор, либо алгоритмы не совсем совпадающие, но нужен результат аналогичный php)

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     # --- ШИФРОВАНИЕ ---
  3.  
  4.     $key = pack('H*', "189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54");
  5.     echo "Ключ: " . $key . "\n";
  6.  
  7.     $key_size =  strlen($key);
  8.     echo "Длина ключа: " . $key_size . "\n";
  9.  
  10.     $plaintext = "This string was must be encrypted";
  11.      echo "Исходник: " . $plaintext . "\n";
  12.  
  13.     $iv = pack('H*', "e4554c4564a5454cc45654a45654ce44");
  14.     echo "Инициализирующий вектор: " . $iv . "\n";
  15.  
  16.     $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
  17.                                  $plaintext, MCRYPT_MODE_CBC, $iv);
  18.  
  19.     $ciphertext_base64 = base64_encode($ciphertext);
  20.  
  21.     echo  "\n"."Зашифровано:".$ciphertext_base64 . "\n\n";
  22.  
  23.     # --- ДЕШИФРОВКА ---
  24.  
  25.     $ciphertext_dec = base64_decode($ciphertext_base64);
  26.  
  27.     $iv_dec=$iv;
  28.  
  29.     $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
  30.                                     $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
  31.  
  32.     echo  "Расшифровано:".$plaintext_dec . "\n\n";
  33.  
  34.  
  35.  
  36. $shkey="189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54";
  37. $shiv="e4554c4564a5454cc45654a45654ce44";
  38.  
  39. $cmd='echo '.$plaintext.' | openssl aes-128-cbc -base64 -nosalt -a -k '.$shkey.' -iv '.$shiv;
  40. echo "Command:".$cmd."\n";
  41. $output = shell_exec($cmd);
  42. echo "\n"."Output:$output"."\n";
  43.  
  44. ?>
 
 Top
ArtyShock
Отправлено: 01 Апреля, 2018 - 14:50:20
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Обновленный вариант. Кроме mcrypt_encrypt добавлен openssl_encrypt (на замену первому приходит так понимаю) и с ними удалось получить одинаковый вариант применив паддинг и 256. Но командный openssl все еще не дает искомого совпадения...

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     # --- ШИФРОВАНИЕ ---
  3.  
  4.     $key = pack('H*', "189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54");
  5.     file_put_contents("k.key",$key);
  6.     echo "Ключ: " . $key . "\n";
  7.    
  8.     $key_size =  strlen($key);
  9.     echo "Длина ключа: " . $key_size . "\n";
  10.    
  11.     $iv = pack('H*', "e4554c4564a5454cc45654a45654ce44");
  12.     echo "Инициализирующий вектор: " . $iv . "\n";
  13.    
  14.     $plaintext = "Thisstringff";
  15.     $block = 16;
  16.     $pad   = $block - (strlen($plaintext) % $block);
  17.     $plaintextn = $plaintext.str_repeat(chr($pad), $pad);
  18.  
  19.      echo "Исходник:" . $plaintext . "<-\n";
  20.      echo "size:".strlen($plaintext). "<-\n";
  21.      echo "Исходник паддинг:" . $plaintextn . "<-\n";
  22.      echo "size паддинг:".strlen($plaintextn). "<-\n";
  23.    
  24.      file_put_contents("pt.in",$plaintext);
  25.      file_put_contents("ptn.in",$plaintextn);
  26.  
  27.     $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,$plaintextn, MCRYPT_MODE_CBC,$iv);
  28.    
  29.     $ciphertext_base64 = base64_encode($ciphertext);
  30.    
  31.     echo  "\n"."Зашифровано:".$ciphertext_base64 . "\n\n";
  32.    
  33.     # --- ДЕШИФРОВКА ---
  34.  
  35.     $ciphertext_dec = base64_decode($ciphertext_base64);
  36.  
  37.     $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,$ciphertext_dec, MCRYPT_MODE_CBC,$iv);
  38.  
  39.     echo  "Расшифровано:".$plaintext_dec . "\n\n";
  40.  
  41. function sslEncrypt128($str, $secret,$iv)
  42. {
  43.     return base64_encode(openssl_encrypt($str, 'aes-256-cbc', $secret, OPENSSL_RAW_DATA,$iv));
  44. }
  45.  
  46. echo  "\n"."Зашифровано openssl_encrypt:";
  47. var_dump(sslEncrypt128($plaintext, $key,$iv));
  48.  
  49.  
  50. $shkey="189cebc45c7caec5c57894564c52ae5646ed4564565ccc4565ec555dd5dd4d54";
  51. $shkeypack="k.key";
  52. $shiv="e4554c4564a5454cc45654a45654ce44";
  53.  
  54. #$cmd='echo '.$plaintext.' | openssl aes-256-cbc -nosalt -a -k '.$shkey.' -iv '.$shiv;
  55. $cmd='openssl aes-256-cbc  -in "pt.in" -nosalt -a -A -k "'.$shkey.'" -iv "'.$shiv.'"';
  56. echo "\nCommand:".$cmd."\n";
  57. $output = shell_exec($cmd);
  58. echo "\n"."Зашифровано openssl:$output"."\n";
  59.  
  60. $cmd='openssl aes-256-cbc  -in "pt.in" -nosalt -a -A -kfile "'.$shkeypack.'" -iv "'.$shiv.'"';
  61. echo "\nCommand:".$cmd."\n";
  62. $output = shell_exec($cmd);
  63. echo "\n"."Зашифровано openssl kfile:$output"."\n";
  64. ?>
 
 Top
ArtyShock
Отправлено: 01 Апреля, 2018 - 17:58:25
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Чьёрт ... докопался - нужно ключ -K применять а не -k Закатив глазки
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB