【发布时间】:2021-07-28 22:23:43
【问题描述】:
我正在实现一个函数来替换os.urandom(n)。下面的代码是我目前所拥有的:
def random_entropy(n):
"""
Returns a random entropy, which is a sequence of numbers between 0, 255
:n: a integer number
"""
if n <= 0:
return ""
buffer = []
for i in range(0, n):
number = random.randint(0, 255)
buffer.append(hex(number))
return ''.join(buffer)
如果我去终端,我会得到以下输出:
>>> import os
>>> os.urandom(10)
'm\xd4\x94\x00x7\xbe\x04\xa2R'
>>> type(os.urandom(10))
<type 'str'>
>>> map(ord, os.urandom(10))
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25]
最后,我希望我的函数返回与os.urandom 类似的输出:'m\xd4\x94\x00x7\xbe\x04\xa2R'(我的意思是二进制输出)。我怎样才能做到这一点?我正在为 SGX 的 ecdsa 模块实现这个,所以我不能使用 os 或 secrets 包。
来自 Python 文档:
返回适合加密使用的大小随机字节字符串。
【问题讨论】:
-
你使用的是 Python 2 不是吗?
-
@MarkRansom 我...我会更新问题
-
您可能想阅读Whats the difference between os.urandom() and random? - 您不能将
random替换为urandom。 -
我强调了这个问题,因为它的答案显示了密码生成器通常是如何工作的:它们最终依赖于难以猜测的不确定性来源。另一个相关问题是:stackoverflow.com/questions/62375129/… 无论如何,
random模块(random.SystemRandom除外,它可能对您有用也可能不适用)不是密码生成器。
标签: python python-2.7 random binary