在perl中生成加密安全的随机数/字符串

时间:2013-07-16 06:12:15

标签: perl perl-module mod-perl

我需要从一组字符中选择随机字符,如0..9,az,Az等。为此,我需要使用Perl脚本生成介于0-n之间的随机整数(n是不同字符的数量) 。但Perl rand功能不具有加密安全性。生成随机数的最佳方法是什么。

现在我正在使用自己的算法,我随机选择了字符串。然后我使用rand生成一个随机数。使用它我在随机数字组中选择一个十进制数。然后将它与随机数相乘。无论我得到的是所选字符的索引。

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的大小,它会越来越安全。但我仍然不确定这是实现这一目标的最佳方式。

请告诉我生成加密安全随机字符串/数字的最佳方法。

由于

2 个答案:

答案 0 :(得分:6)

Math::Random::Secure是一种解决方案(在Linux上使用/dev/urandom)。

Crypt::Random可能是更好的解决方案(利用/dev/random,因此可能会阻止)。

答案 1 :(得分:-3)

另一方面,您在CPAN上拥有Perl模块,可以为您提供功能,例如String::Random

相关问题