gpt4 book ai didi

linux - Perl 代码中的/dev/urandom

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:49 27 4
gpt4 key购买 nike

我正在尝试生成随机数以供我的 Perl 代码中的某些特定用途。

我能够弄清楚 Linux 的命令并且它工作正常。

cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1

我无法在 Perl 中使用相同的命令。我对 Perl 和编程非常陌生。

我尝试研究相同的内容,但无法使其在 perl 中工作。

如果有人可以建议我如何在 perl 中生成随机数,请提供任何建议或任何其他方法。

如有任何疑问,请告诉我。感谢您的帮助

最佳答案

您可以使用以下内容,尽管它不符合加密标准:

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);
}

关于linux - Perl 代码中的/dev/urandom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com