2015-10-13 139 views
0

我讀了一個名爲More Efficient Oblivious Transfer Extensions with Security for Malicious Adversaries紙僞隨機數發生器由吉拉德Asharov,耶胡達·林德爾的,托馬斯·施耐德邁克爾Zohner實現在Python

在第8頁上,他們展示了他們的協議。當呈現正在使用的工具,他們寫:

pseudorandom generator G

如果我的理解是正確的,他們使用稱爲圖G的僞隨機發生器,其作爲輸入由零和長度爲k的那些的併產生一個對象零和零長度的對象m

我的問題是:我該如何在Python中實現它?

我該如何實現一個僞隨機生成器,它需要一個大小爲k的種子並生成大小爲m的輸出?

+0

你知道'm'是什麼嗎? – mgilson

+0

考慮['random.Random.getrandbits(m)'是如何實現的,其中'k = 32'](https://github.com/python/cpython/blob/9633cd29b96022bebce4720587b5830551f4af75/Modules/_randommodule.c#L349-L393) – jfs

+0

@mgilson是的,m將是很大的數字,例如1000或10.000。 – Aventinus

回答

2

你可以只始終產生a string of m ones :-) ...

開玩笑除了一個簡單的解決方案是將輸入數字(這將是02**k-1之間)資訊random.seed,然後從random.randrange(1<<m)得到的結果。

0

您可以使用itertools和random.choice() 這個人會產生出「01」的長度爲39碼的40個排列, 和islice將讓你第一 - 10 1000

>>> li = list(it.islice(map(''.join,permutations('01' * 40, 39)),1000)) 
>>> item = random.choice(li) 
>>> print(item) 
010101010101010101010101010101010101010