2011-09-13 23 views
0

私は、独自の文字列/ idを生成しようとしています。これは、比較的大きな文字列(ディレクトリパス名からなる)を与えられ、crypt関数を使用すると考えられています。しかし、それは期待通りには機能しません。おそらく私が理解できないからです。ここperl 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 
$ 

。塩はすべて同じであることに注意してください。

+0

あなたはユニークな文字列を作成したい場合は、Data :: UUIDを試してみてください。 Matの答えから分かるように、 'crypt()'関数は古く、限られています。 – frezik

答えて

1

crypt(3)機能のみ考慮入力文字列の最初の8つの文字を取る:

キーの最初の8つの文字の各々の最下位7ビットを取ることによって、56ビットの鍵が得られます。この56ビットのキーは、一定の文字列(通常は0のすべてを含む文字列)を繰り返し暗号化するために使用されます。戻り値は、暗号化されたパスワード、一連の13文字のASCII文字(最初の2文字は塩そのものを表します)を示します。

だから、何を見ていることは仕様です - perlfuncから:

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

ありがとうマット、愚かな私です! – ernesto