我正忙于为笔测试人员建立一个实验室,以根据 4 个字母的单词创建 MD5 哈希值。我需要这些单词包含小写和大写字母以及数字和特殊字符的组合,但我似乎不知道如何以所有顺序组合任何给定的字符。所以目前我有这个:
my $str = 'aaaa';
print $str++, $/ while $str le 'dddd';
哪个会做:
aaaa
aaab
aaac
aaad
...
...
dddd
但我没有办法做到这一点:
Aaaa
AAaa
aAaa
...
dddD
更不用说添加数字和特殊字符了。我真正想做的是让角色根据给定的列表创建单词。所以如果我觉得我想用abeDod@#
它应该从这些字符创建所有组合。
编辑以澄清。
假设我给出了角色aBc#
我需要它给它一个计数,表明每个单词最多必须有 4 个字母,并且包含所有给定字符的组合,例如:
aBc#
Bac#
caB#
#Bca
...
我希望这能澄清这个问题。
使用整数列表ASCII 码 http://www.asciitable.com/对于您接受的字符,使用您最喜欢的(伪)随机数生成器从中进行采样。然后使用将每个转换为其字符chr https://perldoc.perl.org/functions/chr.html并将它们连接起来。
Like
perl -wE'$rw .= chr( 32+(int rand 126-32) ) for 1..4; say $rw'
Notes
我使用一行代码只是为了方便复制粘贴测试。请把这个写在脚本中
我用的是粗略的rand https://perldoc.perl.org/functions/rand.html,适合稍微洗牌。如果需要的话更换一个更好的
-
粘合四个(伪)随机数does not建立良好的分布;即使每个字母本身都有作用,但整个字母却没有。但这四个应该可以满足大多数需求。
如果没有,我认为您需要生成一个更长的列表(允许的字符范围可能重复四次)并将其随机化,然后绘制四个字母的子序列。还有很多工作
我需要跳一点踢踏舞来生成从 32 到 126 的(随机)整数rand
,因为它只需要范围的末尾。此外,这会将所有这些都取自该范围,可能不是您想要的;因此请指定您要从中提取的子范围或特定列表
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)