我想生成40位值,这些值是唯一且不那么容易猜到的。
我该怎么办?有什么建议吗?
CNC中
我对算法感兴趣,C#或Java将成为最重要的樱桃!
-edit2-
我能够存储以前的值,但我不想每次生成新的数字时检查整个列表
答案 0 :(得分:0)
你在哪个平台上?在unix-ish系统中,只读取/ dev / random中的40位(如果可用熵不足则为块)或/ dev / urandom(不阻塞,但如果熵有限,也会产生质量较低的随机数)。
答案 1 :(得分:0)
从第一个版本的程序(将是独特的部分)获得第一个12位(最多4095),其他38位使用来自随机系统调用/功能。 所以你最后一天才重新检查唯一的值。 抱歉,GRANT与非可预测(随机)值无关。
你可以使用更多日期,例如高达秒。你可以篡改可预测的(日期)位,但它不会增加安全性。
无论如何,你必须在独特的检查时间/随机质量之间取得平衡。为了提高检查速度,可以使用二叉树或其他技术。
你也可以使用高达毫秒的定时器值。对于繁忙的系统,它将是唯一的(如果线程锁定+ 50ms睡眠)并且在多线程环境中不可预测。
答案 2 :(得分:-1)
日期| md5sum | cut -b 4-9
类似的东西