开发者

Help needed with perl crypt function

I am trying to generate a unique string/id given another relatively large string(consisting of a directory path name), thought of using crypt function. However, it's not working as expected, most probably due to my inability to understand.

here the code & output:

#!/usr/bin/perl 

print "Enter a string:"; 
chomp(my $string =开发者_Go百科 <STDIN>); 

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

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

output:

$ 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
$

I couldn't understand why it returned the same encrypted string for the first two strings and differed for the third one. Note that salt is same for all.


The crypt(3) function only takes into account the first eight chars of the input string:

By taking the lowest 7 bits of each of the first eight characters of the key, a 56-bit key is obtained. This 56-bit key is used to encrypt repeatedly a constant string (usually a string con‐ sisting of all zeros). The returned value points to the encrypted password, a series of 13 print‐ able ASCII characters (the first two characters represent the salt itself).

So what you are seeing is by design - from perlfunc:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜