0

crypt関数を使用することを考えて、別の比較的大きな文字列(ディレクトリパス名で構成される)を指定して、一意の文字列/ IDを生成しようとしています。しかし、おそらく私の理解力の欠如が原因で、期待どおりに機能していません。

ここにコードと出力:

#!/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
$

最初の 2 つの文字列では同じ暗号化文字列を返し、3 番目の文字列では異なる理由がわかりませんでした。塩はすべて同じであることに注意してください。

4

1 に答える 1

1

このcrypt(3)関数は、入力文字列の最初の8文字のみを考慮します。

キーの最初の8文字のそれぞれの下位7ビットを取得することにより、56ビットのキーが取得されます。この56ビットのキーは、一定の文字列(通常はすべてゼロで構成される文字列)を繰り返し暗号化するために使用されます。戻り値は、暗号化されたパスワード、一連の13個の印刷可能なASCII文字(最初の2文字はソルト自体を表します)を指します。

だからあなたが見ているのは設計によるものです-からperlfunc

crypt PLAINTEXT,SALT
       Creates a digest string exactly like the crypt(3) function in the C library
于 2011-09-13T12:11:12.607 に答える