我需要一种生成OTP码的算法。
6位输出(小数字为0)
无状态数据(或数据库)
每一个号码将至少间隔1毫秒(通常为几秒)
一小时后可以重复使用号码
我的第一次尝试:
用当前时间制作一个种子编号。
17:12:12.033=>(12*60+12)*1000+33=73233enter code here
(小时值被删除。所以这有一个小时)
最多6位数,计算提醒999999。
(73233型号999999)+1=73234=>073234
但是,为了不显示顺序递增,在mod
((73233*123456)型号999999)+1=62290=>062290
为了避免0秒输出,在mod之前添加一个随机数
((73233*123456+123456)型号999999)+1=185746
17:00:00.000=>123457
17:00:00.001=>246914
17:00:01.000=>469069
17:01:00.000=>860197

17:59:59.999=>314956Wolfram Alpha
它是否足够独特?
我如何证明这个方案在数学上是可行的?
改正错误。

最佳答案

许多prng算法实际上都具有内置的唯一性。检查其中一些http://en.wikipedia.org/wiki/List_of_random_number_generators

10-06 10:42