随即产生10位16进制数
set num1 [expr {round(4294967296*rand())}]
set a [format " % 08x" $num1 ]
set num2 [expr {round(256*rand())}]
set b [format " % 02x " $num2]
set c $b$a
set c [join $c {}]
这个脚本的难点是利用format函数只能产生8位16进制数,所以又随即产生了两位,最后把他们连接起来,去掉中间的空格.
随即产生64位ASCII
set f ""
for {set i 0 } {$i < 64} { incr i } {
set d [expr {33+int(94*rand())}]
if { $d==34 } {set e /"
} elseif { $d==91 } { set e /[
} elseif { $d==123 } { set e /{
} else { set e [format " %c " $d] }
set f $f$e
set f [join $f {}]
}
这个脚本的难点是首先产生随即的ASCII对应的数字,然后转换成ASCII,由于" [ { 三个字符特殊,所以做了特殊处理,连接每个ASCII,去掉中间的空格.这个脚本还是有点问题,就是不能输出/字符.修改中.
这么编写的脚本在不能输出/符号,下面给出另一种实现方法,可以解决这个问题,并能实现任意位字符的输出.
proc createPassword { {minlen 64}} {