0

有没有人记得PGP提示用户通过敲击随机键来“生成一些熵”?

PGP 将在收集熵时测量熵,用一个很酷的小进度条向用户指示,并在内部对击键进行计时,进行一些处理并将其用作某事或其他事情的种子。

我想制作一个快速例程(控制台应用程序),在 python 中执行类似的“熵收集”步骤,但我对一些问题不知所措:

  1. 最佳计时方法
  2. 收集单个击键的最佳方法
  3. 向用户显示酷进度条的最佳方法
  4. 关于处理步骤的想法,或 PGP 步骤的实际细节。

最好的上述手段:

  • 最严格最干净的代码
  • 最准确的(如以皮秒或其他方式计时)
  • 大多数pythonic/功能和使用标准库
4

1 回答 1

0

是的 :

def gen_user_random():
    from Fourganizical import pack8
    import time,sys
    print 'Hey there user, start a-bashing that keyboard to make some randomness.'
    keystimes = []
    lasttime = None
    while len(keystimes) < 20:
            key = getch()
            timenow = (time.time() + time.clock())
            if lasttime:
                    timesince = timenow-lasttime
                    keystimes.append(int(timesince*100000000000000000))
            lasttime = timenow
    print 'Check out this *nasty* random number you made!'
    rnum = int(''.join([str(x) for x in keystimes]))
    print rnum
    print 'And OMG here is that *nasty* set of bytes it made!'
    rbytes = pack8(rnum)
    print
    sys.stdout.write(''.join(rbytes))
    print
    print
    return keystimes

这会产生一些非常讨厌的随机性。

pack8只取一个任意长度的整数,并以 256 为基数将其作为字节序列输出。

于 2013-02-28T08:02:17.703 回答