2

0..9、az、Az などの一連の文字からランダムな文字を選択する必要があります。このために、Perl スクリプトを使用して 0-n (n は異なる文字の数) の間のランダムな整数を生成する必要があります。しかし、Perl の rand 関数は暗号的に安全ではありません。乱数を生成する最良の方法は何ですか。

現在、文字列をランダムに選択した独自のアルゴリズムを使用しています。次に、rand を使用して乱数を生成しています。これを使用して、ランダムな数値セットの中から 10 進数を選択しています。次に、それに乱数を掛けます。私が得ているものは、選択された文字のインデックスです。

my @chars = ('a'..'d','#','N'..'Z','$','e'..'f','0'..'9');
my @random_numbers_list = ('1.0145','1.3464','1.8453','1.5145','1.9994');
my $random_string;
my $random_number;
my $chars_length = scalar @chars;
foreach (1 .. $length) {
            $random_number = (rand $chars_length)*$random_numbers_list[rand(5)];
            $random_number = ($random_number>$chars_length)?$random_number-$chars_length:$random_number;
            $random_string .= $chars[$random_number];
}
print $random_string;

私は random_numbers_list のサイズを増やし続けていることを知っています。それはますます安全になるでしょう。しかし、これがこれを達成するための最良の方法であるかどうかはまだわかりません。

暗号的に安全なランダムな文字列/番号を生成するための最良の方法を教えてください。

ありがとう

4

2 に答える 2

6

Math::Random::Secure1つのソリューションです(/dev/urandomLinuxで利用)。

Crypt::Randomおそらくより良い解決策です(を利用する/dev/randomため、ブロックされる可能性があります)。

于 2013-07-16T06:17:02.833 に答える
-4

一方、CPAN にはString::Randomのような機能を提供する Perl モジュールがあります。

于 2013-07-16T06:19:40.920 に答える