我正忙于建立一个用于笔测试器的实验室,以从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
...
我希望可以澄清这个问题。
答案 0 :(得分:6)
使用ASCII codes的整数列表作为接受的字符,以使用您喜欢的(伪)随机数生成器从中进行采样。然后使用chr将每个字符转换为其字符并将它们连接起来。
喜欢
perl -wE'$rw .= chr( 32+(int rand 126-32) ) for 1..4; say $rw'
注释
我仅使用单线来进行简单的复制粘贴测试。请用脚本将其写得很好
我使用粗略的rand,非常适合拖拉东西。如有需要,请替换为更好的
粘贴四个(伪)随机数不会建立良好的分布;即使每个字母都自己写,整个事情也不是。但是这四个应该可以满足大多数需求。
如果没有,我认为您需要产生一个更长的列表(允许的字符范围可能重复四次)并将其随机化,然后绘制四个字母的子序列。还有很多工作
我需要一点点踢踏舞才能使用rand
产生32到126之间的(随机数)整数,因为它只占用范围的末尾。而且,这会使所有这些对象都处于该范围内,可能不是您想要的;因此,请指定您要从中绘制的子范围或特定列表