Нужна помощь с функцией Perl Crypt - PullRequest
0 голосов
/ 13 сентября 2011

Я пытаюсь сгенерировать уникальную строку / идентификатор, используя другую относительно большую строку (состоящую из имени пути к каталогу), подумав об использовании функции crypt. Тем не менее, он работает не так, как ожидалось, скорее всего из-за моей неспособности понять.

здесь код и вывод:

#!/usr/bin/perl 

print "Enter a string:"; 
chomp(my $string = <STDIN>); 

my $encrypted_string = crypt($string,'di'); 

print "\n  the encrypted string is:$encrypted_string";

выход:

$ perl crypt_test
 Enter a string:abcdefghi

 the encrypted string is:dipcn0ADeg0Jc
$
$ perl crypt_test
 Enter a string:abcdefgh

 the encrypted string is:dipcn0ADeg0Jc
$
$
$ perl crypt_test
 Enter a string:abcde

 the encrypted string is:diGyhSp4Yvj4M
$

Я не мог понять, почему он возвращал одну и ту же зашифрованную строку для первых двух строк и отличался для третьей. Обратите внимание, что соль одинакова для всех.

1 Ответ

1 голос
/ 13 сентября 2011

Функция crypt(3) учитывает только первые восемь символов входной строки:

Взяв младшие 7 бит каждого из первых восьми символов клавиши, 56-бит ключ получен.Этот 56-битный ключ используется для многократного шифрования константной строки (обычно строки, состоящей из всех нулей).Возвращаемое значение указывает на зашифрованный пароль, серию из 13 печатных символов ASCII (первые два символа представляют саму соль).

Итак, вы видите, что дизайн - от perlfunc:

crypt PLAINTEXT,SALT
       Creates a digest string exactly like the crypt(3) function in the C library
...