2013-02-28 43 views
0

有沒有人回憶PGP提示用戶通過敲擊隨機鍵來「生成一些熵」?最好的Python方法來從鍵盤輸入用戶熵收穫PGP?

PGP會在收集時測量熵值,向用戶指示一個很酷的小進度條,並在內部爲關鍵筆劃計時,進行一些處理並將其用作某種或某種其他種子的種子。

我想打一個快速程序,做了類似「熵集」在python步驟(控制檯應用程序),但我在有關的一些問題茫然:

  1. 最佳方法的定時
  2. 收集各次擊鍵
  3. 最佳方法來顯示涼爽進度條回用戶
  4. 有關處理步驟,或PGP步驟的實際細節思想的最佳方法。
在上述裝置

最佳:

  • 最嚴格乾淨的代碼
  • 最準確的(如在定時到皮秒或東西)
  • 大多數Python化/功能,並使用標準庫
+0

我不認爲它明確地是一個「敲擊鍵」類型的東西,但PGP/GPG在鍵創建期間在消息中指示「鍵盤和鼠標」輸入用於熵。 – L0j1k 2013-02-28 06:53:06

+0

好的。也許我夢想這部分。一個「bash鍵盤」型的東西是我想要的。 – 2013-02-28 06:53:46

+1

我不知道,也許我錯了。 :P – L0j1k 2013-02-28 06:54:19

回答

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 

這創建了一些really nasty隨機性。

pack8只需要一個任意長度的整數並以256爲單位輸出它作爲一個字節序列。