md5. MD5-отпечаток строки


^math:md5[строка]

Из переданной
строки получает «отпечаток» размером 16 байт.
Выдает его представление в виде строки - байты представлены в шестнадцатиричном виде без разделителей, в нижнем регистре.

Считается, что практически невозможно
· создать две строки, имеющие одинаковый «отпечаток»;  
· восстановить исходную строку по ее «отпечатку».  

Пример

В качестве имени cache-файла возьмем «отпечаток» строки $request:uri, это обеспечит взаимно-однозначное соответствие имени строке запроса, а также избавит нас от необходимости укорачивать строку запроса и очищать ее от спецсимволов.

^
cache[$cache_directory/^math:md5[$request:uri]]($cache_time){
    …
}

Подробная информация о MD5 доступна здесь: http://www.ietf.org/rfc/rfc1321.txt



User comments:

Sanja v.2 24 февраля 2007 15:58

Аналог этой функции на Perl - функция md5_hex (а не md5, как могло бы показаться). Пример их совместного использования:

**** script.pl ****

use CGI;
use Digest::MD5 qw(md5_hex);
my $SECRET = "james bond 007";
my $signed_value = "значение, которое пользователю нельзя дать подменить";
my $signature = md5_hex($SECRET . "|" . $signed_value);

# Пользователь переадресуется со страницы на Perl на страницу на Парсере:
print $cgi->redirect('http://example.com/parser.html?signed_value=' . uri_escape($signed_value) . '&signature=' . $signature ');

**** parser.html ****

$SECRET[james bond 007]
^if(
^math:md5[$SECRET|$form:signed_value] eq
$form:signature
){
$form:signed_value в порядке
}{
Редиска-хакер попытался подделать $form:signed_value !!!
}

***********

Заметьте, $SECRET не передаётся между страницами - посетителю сайта негде его подсмотреть.

Внимание! Не забудьте, если требуется, вставить в $signature IP-адрес посетителя, значение его $env:USER_AGENT и текущие дату и время (UNIX timestamp). Если они изменились или прошло слишком много времени между обращением к perl-скрипту и странице на parser - это признак мошенничества.

    Поддержать сайт на родительском проекте КГБ