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