有没有一种方法可以在TCL 8.5中使用种子生成伪随机数?

时间:2020-02-12 04:23:22

标签: random cryptography tcl

我可以使rand()工作,但是它的输出只有0到1,并且我不能在其中使用任何种子值。

试图在TCL中创建一个伪随机数生成器,并使用md5哈希算法进行类似的处理,proc {secretseed length}输出一些$ length字节。

2 个答案:

答案 0 :(得分:1)

我可以使rand()工作,但是它只有从0到1的输出,并且 我不能在其中使用任何种子值。

srand呢?

答案 1 :(得分:1)

Tcl的rand()产生在间隔 [0.0,1.0)中均匀分布的随机数(即,允许返回0.0,但不返回1.0)。它不是密码质量的,甚至根本不适合与蒙特卡洛模拟一起使用(因为没有做任何努力来确保底层的RNG产生良好的频谱分布)。可以使用特殊的srand()函数来设置RNG的种子,例如,

expr { srand(123) }

要生成某个范围内的整数,您需要重新缩放数字:

proc random {from to} {
    expr {$from + int(rand() * ($to - $from))}
}

要从列表中产生随机选择,请执行以下操作:

proc pick {list} {
    lindex $list [expr {int(rand() * [llength $list])}]
}