我需要从一组字符中选择随机字符,比如 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 的大小,它会越来越安全。但我仍然不确定这是实现这一目标的最佳方式。
请让我知道生成加密安全随机字符串/数字的最佳方法。
谢谢