我正在阅读由 Gilad Asharov,Yehuda Lindell,Thomas Schneider 和 Michael Zohner 撰写的一篇名为More Efficient Oblivious Transfer Extensions with Security for Malicious Adversaries的论文。
在第8页,他们展示了他们的协议。在展示所使用的工具时,他们写道:
如果我的理解是正确的,他们使用一个名为G的伪随机生成器,其中将一个由零和长度为k的对象作为输入,并产生一个零和一个长度为m 的对象。
我的问题是:如何在Python中实现此功能?
如何实现伪随机生成器,该生成器采用大小为k的种子并生成大小为m的输出?
答案 0 :(得分:2)
您可以随时生成a string of m
ones :-) ...
分开一个简单的解决方案是将输入数字(在0
和2**k-1
之间)提供给random.seed
,然后从random.randrange(1<<m)
获取结果。< / p>
答案 1 :(得分:0)
你可以使用itertools和random.choice() 这个将产生于&#39; 01&#39;长度为40的排列,大小为39, 并且islice会在1000分中获得10分。
>>> li = list(it.islice(map(''.join,permutations('01' * 40, 39)),1000))
>>> item = random.choice(li)
>>> print(item)
010101010101010101010101010101010101010