我正在尝试为我的perl代码中的某些特定用途生成随机数。
我能够找出linux及其工作正常的命令。
cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
我无法在perl中使用相同的命令。我是perl和编程的新手。
我尝试过研究相同但不能使它在perl中工作。
任何建议或任何其他方式如果有人可以建议我如何在perl中生成随机数。
如果有任何问题,请告诉我。 谢谢你的帮助
答案 0 :(得分:3)
您可以使用以下内容,但不符合加密标准:
my @syms = ('a'..'z', 'A'..'Z', '0'..'9', split(//, '-_!@#$%^&*()_+{}|:<>?=') );
my $random = join '', map $syms[rand(@syms)], 1..10;
如果您尝试生成密码,以下是对原始解决方案的改进。虽然它降低了密码的熵(使其更容易受到无人使用的暴力攻击),但它通过保证混合字符类型来增加抵抗字典攻击的机会。
my @lc = 'a'..'z';
my @uc = 'A'..'Z';
my @na = ( '0'..'9', split(//, '-_!@#$%^&*()_+{}|:<>?=') );
@$_ = grep !/^[0O1liI]\z/, @$_
for \@lc, \@uc, \@na;
my @all = ( @lc, @uc, @na );
sub gen_password {
return
join '',
shuffle
map($all[rand(@all)], 1..4),
map($lc[rand(@lc)], 1..2),
map($uc[rand(@uc)], 1..2),
map($na[rand(@na)], 1..2);
}