The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"perl, backticks, exec etc"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 16:27 
Добрый день.

Правильна ли такая конструкция?

-------
my $dataToSign = "Some text\nSome text\nSome text\n";
my $signedQuery = `echo -ne "$dataToSign\n" | openssl dgst ... -hex`;
-------

Собственно проблема в том что что-то лишнее где-то присутствует - подпись не верная генерируется. Делаем так (для проверки):
-------
my $dataToSign = "Some text\nSome text\nSome text\n";
open (FH, ">./tmpfile");
print FH $dataToSign;
close (FH);
my $signedQuery = `openssl dgst ... -hex ./tmpfile`;
------
Так все верно генерируется. Чего я недопонимаю?

Всего доброго.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 16:28 
Ах да, это все #!/usr/bin/perl разумеется.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "perl, backticks, exec etc"  
Сообщение от ACCA (ok) on 04-Окт-06, 20:17 
>Правильна ли такая конструкция?

Попробуй так:

my $dataToSign = "Some text\nSome text\nSome text\n";
my $signedQuery = `echo -ne "$dataToSign" | openssl dgst ... -hex`;

>Так все верно генерируется. Чего я недопонимаю?

Не ставь \n где попало.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 20:25 
>>Правильна ли такая конструкция?
>
>Попробуй так:
>
>my $dataToSign = "Some text\nSome text\nSome text\n";
>my $signedQuery = `echo -ne "$dataToSign" | openssl dgst ... -hex`;
>
>>Так все верно генерируется. Чего я недопонимаю?
>
>Не ставь \n где попало.

Однохренственно. Да \n там действительно не нужен, когда в форум писал поставил случайно. Собственно его нет в реальном коде.

интересно то что если сделать так:
print `echo -ne "$dataToSign`;
, то получам на экране:
------
-ne Some text
Some text
Some text
------
не станно?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "perl, backticks, exec etc"  
Сообщение от AMDmi3 on 04-Окт-06, 22:51 
>Так все верно генерируется. Чего я недопонимаю?

Не надо так делать.
Во-первых, плодятся лишние процессы (sh).
Во-вторых, sh не понимает -ne (man sh: Only one of the -e and -n options may be specified.).
В-третьих, нарветесь на проблемы с переводами строк/кавычками/обратными слешами в данных.

Правильно:

open(PIPE, "| openssl ... |");
print PIPE $dataToSign;
print while(<PIPE>);
close PIPE;

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:07 
>open(PIPE, "| openssl ... |");
>print PIPE $dataToSign;
>print while(<PIPE>);
>close PIPE;

Хм. Странно но он результат в консоль валит при таком подходе
...
my $out;
...
$out = <PIPE>;
...
Опять не въезжаю - вроде маны уже перечитал все

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "perl, backticks, exec etc"  
Сообщение от AMDmi3 on 04-Окт-06, 23:34 
>>open(PIPE, "| openssl ... |");
>>print PIPE $dataToSign;
>>print while(<PIPE>);
>>close PIPE;
>Хм. Странно но он результат в консоль валит при таком подходе

Точно, так тоже нельзя :)
Правильный ответ - в perldoc perlipc, глава `Bidirectional Communication with Another Process'

#!/usr/bin/perl

use FileHandle;
use IPC::Open2;

$pid = open2(*OUT, *IN, "md5");

print IN "somedata";
close IN;
$result = <OUT>;
close OUT;

waitpid($pid, 0); # чтобы зомбей не плодить

print "Result: $result\n";

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:41 
>>>open(PIPE, "| openssl ... |");
>>>print PIPE $dataToSign;
>>>print while(<PIPE>);
>>>close PIPE;
>>Хм. Странно но он результат в консоль валит при таком подходе
>
>Точно, так тоже нельзя :)
>Правильный ответ - в perldoc perlipc, глава `Bidirectional Communication with Another Process'
>
>
>#!/usr/bin/perl
>
>use FileHandle;
>use IPC::Open2;
>
>$pid = open2(*OUT, *IN, "md5");
>
>print IN "somedata";
>close IN;
>$result = <OUT>;
>close OUT;
>
>waitpid($pid, 0); # чтобы зомбей не плодить
>
>print "Result: $result\n";
блин, интересно а на площадке (на хостинге) дадут процесс запустить отдельный. Думаю нет. Надо проверить. В любом случае спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "perl, backticks, exec etc"  
Сообщение от AMDmi3 on 04-Окт-06, 23:45 
>блин, интересно а на площадке (на хостинге) дадут процесс запустить отдельный. Думаю
>нет. Надо проверить. В любом случае спасибо.
А, по твоему, `` не запускают отдельный процесс?

Кстати, имеет смысл посмотреть готовые модули.
http://search.cpan.org/~oesi/OpenSSL-0.09/OpenSSL/Digest.pm

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

9. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:47 
>>блин, интересно а на площадке (на хостинге) дадут процесс запустить отдельный. Думаю
>>нет. Надо проверить. В любом случае спасибо.
>А, по твоему, `` не запускают отдельный процесс?
>
>Кстати, имеет смысл посмотреть готовые модули.
>http://search.cpan.org/~oesi/OpenSSL-0.09/OpenSSL/Digest.pm

Не, уже смотрел, я немогу их собственно установить на площадке. Т.е. модули то ставятся а вот libopenssl'я нет и не будет, странно, но такая фот площадка.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

10. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:49 

К тому же я как-то не въехал как ему подсовывать ключ. Документацию посмотрел так краем глаза - там почти ничего нет в man'е, просто времени не было.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

12. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:57 
>
>К тому же я как-то не въехал как ему подсовывать ключ. Документацию
>посмотрел так краем глаза - там почти ничего нет в man'е,
>просто времени не было.


да. static

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

11. "perl, backticks, exec etc"  
Сообщение от AMDmi3 on 04-Окт-06, 23:51 
>Не, уже смотрел, я немогу их собственно установить на площадке. Т.е. модули
>то ставятся а вот libopenssl'я нет и не будет, странно, но
>такая фот площадка.
Хмм. Там openssl что-ли статически собран? У меня на FreeBSD /usr/bin/openssl слинкован с /usr/lib/libssl.so.4 и /lib/libcrypto.so.4. Ну, описанный способ с open2 вполне работоспособен, в случае чего.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

13. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 04-Окт-06, 23:58 
>>Не, уже смотрел, я немогу их собственно установить на площадке. Т.е. модули
>>то ставятся а вот libopenssl'я нет и не будет, странно, но
>>такая фот площадка.
>Хмм. Там openssl что-ли статически собран? У меня на FreeBSD /usr/bin/openssl слинкован
>с /usr/lib/libssl.so.4 и /lib/libcrypto.so.4. Ну, описанный способ с open2 вполне работоспособен,
>в случае чего.


да, static.
Хотя попробую может в $HOME собрать. Может удастся. А как его юзать, походу вопрос сразу. Как подгрузить ключ?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

14. "perl, backticks, exec etc"  
Сообщение от AMDmi3 on 05-Окт-06, 01:59 
>да, static.
>Хотя попробую может в $HOME собрать. Может удастся. А как его юзать,
>походу вопрос сразу. Как подгрузить ключ?
Ты про модуль? Не знаю, не пользовал. Если про open2, там можно ключи указывать и даже несколько команд, а-ля open2(*A, *B, "openssl -key1 | cat -n | wc -l | md5")
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

15. "perl, backticks, exec etc"  
Сообщение от alexey9 email(??) on 06-Окт-06, 05:31 
>>да, static.
>>Хотя попробую может в $HOME собрать. Может удастся. А как его юзать,
>>походу вопрос сразу. Как подгрузить ключ?
>Ты про модуль? Не знаю, не пользовал. Если про open2, там можно
>ключи указывать и даже несколько команд, а-ля open2(*A, *B, "openssl -key1
>| cat -n | wc -l | md5")

Спасибо, Уважаемый, за помощь &mdash все отлично работает. :)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру