【发布时间】:2018-06-26 16:30:43
【问题描述】:
我想做的事:
基于字符串的内容(例如a1b2c3d4e5),我想生成一堆“可重复”的随机事件。在 Golang 中生成可重复的随机数很容易 - 您只需使用 rand.Seed() 函数为随机数生成器播种特定数字,然后就完成了。
但是,rand.Seed() 函数将 int64 作为参数。所以我需要以某种方式将字符串转换为 int64。
我已经尝试过的:
我的第一个想法是使用base64对字符串进行编码,然后将字节序列转换为int64。但是,通过一些似乎只支持大约 7 长度的字符串的基本测试。添加第 8 个字符后,数字保持不变。
我想这里的根本问题是可能的字符串值比可能的 int64 值更多。
那么某种散列函数呢?我知道的大多数哈希函数都会返回一个字节序列;我需要某种返回 int64 的哈希函数。也许这种方法也被误导了?
【问题讨论】:
-
出于安全原因,是否要求种子不容易从输入字符串中操作/检测?因为如果不是,我想不出任何理由为什么只取字符串的任何散列并应用
mod MAXINT是不够的。
标签: string go random seed random-seed