PHP.SU

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

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

> Найдено сообщений: 19
ArtyShock Отправлено: 01 Апреля, 2018 - 17:58:25 • Тема: Замена mcrypt_encrypt (php) на openssl (shell_exec) • Форум: Операционная система и системные вызовы

Ответов: 2
Просмотров: 3431
Чьёрт ... докопался - нужно ключ -K применять а не -k Закатив глазки
ArtyShock Отправлено: 01 Апреля, 2018 - 14:50:20 • Тема: Замена mcrypt_encrypt (php) на openssl (shell_exec) • Форум: Операционная система и системные вызовы

Ответов: 2
Просмотров: 3431
Обновленный вариант. Кроме 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. ?>
ArtyShock Отправлено: 01 Апреля, 2018 - 00:51:27 • Тема: Замена mcrypt_encrypt (php) на openssl (shell_exec) • Форум: Операционная система и системные вызовы

Ответов: 2
Просмотров: 3431
Приветствую! В общем задача - заменить 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. ?>
ArtyShock Отправлено: 07 Июля, 2015 - 01:33:49 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Как ни странно :о) проксяпрокладка заставила таки работать девайсину.
Просто та самая задержка от обработки заголовков туда сюда отслужила положительную службу. А именно антидос тот что срабатывал на конечном медиасервере просто стал получать запросы не так быстро как раньше и соответственно не воспринимает уже многочисленные запросы как вредные (можно собственно и принудительно паузы между запрос-ответ добавить).
Вот только странность осталась avi, mp4 работают а mkv нет, пока не понял почему..
ArtyShock Отправлено: 29 Июня, 2015 - 02:23:08 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Насчет проще то да, но прикол в том что прокладка будет запускаться на самом же клиенте. Благо такое возможно сделать, но на клиенте нет места для скачки контента полностью, а так же нет ресурсов в качестве прокладки держать для этого промежуточный полноценный сервер (у кот. будет место хранить контент целиком).
Т.е. девайсина будет являться и клиентом и прокладкосервером одновременно, но запросы от девайсины в сторону конечного медиасервера должны начать исходить не так варварски как реализовали проприетарщики в клиенте девайсины )
Да, тут скорее придется пожертвовать перемотками и т.п. но хоть как то )
Ну с порционной выдачей приемом уже буду долбаться сам )
Еще раз Спасибо!
ArtyShock Отправлено: 29 Июня, 2015 - 02:10:55 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Похоже что время суток дает о себе знать, начинаю непонимать Улыбка
За код спасибо еще раз но это только начало. Как бы отзеркалили заголовки, с чуть притормозом клиент таки делает что задумал. Но изначально задача прокладки была кроме этого в том что бы обмануть клиента который слишком часто запрашивает и эмулировать ему ответы сервера так как хочет клиент, а у самого сервера запрашивать данные не так часто (как это реализовано в проприетарном кривом клиенте). К тому что кроме заголовков прокладкой придется запрашивать и сами данные (часть их) и переотдавать их клиенту, через passthru допустим, в том виде в кот. он хочет.
ArtyShock Отправлено: 29 Июня, 2015 - 01:39:44 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Ух, спасибо за материал. Будет над чем подумать (в 1:30 пока не получается Улыбка )

P.S. .... когда уже "спасибоспособность" появится?....
ArtyShock Отправлено: 29 Июня, 2015 - 00:59:21 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Все правильно, нужна именно "прокладка" посреди цепочки )

armancho7777777 вероятно Ваш пример с заголовками будет достаточен для старта. Не были бы Вы так любезны засветить Ваш пример Закатив глазки

P.S. и здесь
armancho7777777 пишет:
получил заголовки -> отдал клиенту.

но сам контент забирается клиентом таки с целевого сервера а не выплевывается прокладкой?
ArtyShock Отправлено: 28 Июня, 2015 - 09:31:25 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
DeepVarvar да, просто надеялся что можно таки апач промониторить его же средствами.
armancho7777777 не то - это будут ответы броузеру а не железяке.
ArtyShock Отправлено: 28 Июня, 2015 - 00:11:57 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Забросил на время эту тему, теперь наступило время продолжить..
Есть технический вопрос, конечно не совсем php касается.
Что бы эмулировать ответ сервера в этом прокси мне нужно точно и подробно знать а как отвечает обычный сервер с медиаконтентом.
Допустим временно использую свой сервер с апачем. Дефолтный Лог апача как по мне не очень то информативен. Как можно или расширить лог или еще как со стороны подойти (например трафик ловить) что бы увидеть точно как сервак отдает (headers, размеры) контент на запрос медиажелезяки?
Всё это для того что бы я мог давать внутри прокси верные ответы на запрос контента..
ArtyShock Отправлено: 19 Мая, 2015 - 20:42:45 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Проверил.. сам виноват что сразу не проверил через print_r полный ответ.
А сделал как в примере и поверил описанию $_SERVER в кот. они не описаны
Получил что то типа
CODE (htmlphp):
скопировать код в буфер обмена
  1. ----
  2.     [HTTP_HOST] => 127.0.0.1:80      
  3.     [CONTENT_LENGTH] => 0          
  4.     [HTTP_RANGE] => bytes=92-                      
  5. ----


выглядит странновато но то уже посмотрю что оно хочет..
Еще раз спасибо! (по другому пока не спасибается)
ArtyShock Отправлено: 19 Мая, 2015 - 16:00:41 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Спасибо, проверю, видимо в этом и заключался всего навсего вопрос новичка Улыбка
ArtyShock Отправлено: 19 Мая, 2015 - 15:39:07 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Ok, и где его смотреть?
в $_SERVER не заявлен такой
ArtyShock Отправлено: 19 Мая, 2015 - 14:51:01 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
М.. ну прямо сейчас нет.
Но делал вот по первому примеру отсюда - ничего полезного касательно размера запрашиваемых данных нет.. (собственно в описании и не заявлено присутствие)
ArtyShock Отправлено: 19 Мая, 2015 - 14:27:36 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1896
Так я и пишу свой прокси на 127.0.0.1 на девайсе..
И задаю вопрос - как в коде php узнать сколько данных с меня запросили сейчас что бы столько и отдать.. Я через $_SERVER или $_GET вижу только тип запроса и там например что именно спрашивают а размер не вижу.. Как увидеть?
Как узнать сколько "клиент-девайс" запросил сейчас что бы эхом или passthru выплюнуть ему то что запросил но с медиасервера при этом забрать заранее один раз и побольше.. При этом еще следующую паритию отдать с нового места.. и так до тех пор пока не запросит наконец большой кусок..

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB