Python 3.x python中uuid4和U字节之间的区别是什么?
检查了和的cpython源代码。两者似乎都在使用os.uradomPython 3.x python中uuid4和U字节之间的区别是什么?,python-3.x,random,cryptography,operating-system,uuid,Python 3.x,Random,Cryptography,Operating System,Uuid,检查了和的cpython源代码。两者似乎都在使用os.uradom #uuid.py def uuid4(): """Generate a random UUID.""" return UUID(bytes=os.urandom(16), version=4) #secrets.py def token_bytes(nbytes=None): """Return a random byte string containing *nbytes* bytes. If
#uuid.py
def uuid4():
"""Generate a random UUID."""
return UUID(bytes=os.urandom(16), version=4)
#secrets.py
def token_bytes(nbytes=None):
"""Return a random byte string containing *nbytes* bytes.
If *nbytes* is ``None`` or not supplied, a reasonable
default is used.
>>> token_bytes(16) #doctest:+SKIP
b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b'
"""
if nbytes is None:
nbytes = DEFAULT_ENTROPY
return _sysrand.randbytes(nbytes)
# This is code for randbytes in SystemRandom in random
def randbytes(self, n):
"""Generate n random bytes."""
# os.urandom(n) fails with ValueError for n < 0
# and returns an empty bytes string for n == 0.
return _urandom(n)
#uuid.py
def uuid4():
“”“生成随机UUID。”“”
返回UUID(字节=os.uradom(16),版本=4)
#秘密
def令牌_字节(n字节=无):
“”“返回包含*nbytes*字节的随机字节字符串。
如果*nbytes*为“无”或未提供,则
使用默认值。
>>>令牌_字节(16)#doctest:+SKIP
b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b'
"""
如果nbytes为无:
n字节=默认值\u熵
返回_sysrand.randbytes(n字节)
#这是SystemRandom中randbytes的代码random中的randbytes
def随机字节(自身,n):
“”“生成n个随机字节。”“”
#os.Uradom(n)失败,n<0时出现ValueError
#并返回n==0的空字节字符串。
返回(n)
IETF警告不要将uuid用于安全功能。参见第6节。
上面说
如果秘密真的像uuid4一样使用Uradom,我们可以用uuid4代替秘密吗。使用秘密令牌_字节而不是uuid4本身的全部目的是什么?。根据IETF的标准,api密钥/令牌的机密模块真的不安全吗 您可能会惊讶地发现随机UUID并不是完全随机的。精确地说,有6位设置为特定值(表示它是随机UID)。它们被创造为独特的(具有高度的确定性)。UUID有一个特定的用途,因此您可以找到在其上定义的各种方法 此外,顾名思义,它们并不意味着是秘密。这也可能意味着不采取可能适用于保密的保护措施。例如,字符串通常很容易在内存中找到,UUID通常在文本表示中使用/通信 代币是不同的东西。它通常是加密和保密的。因此,它有不同的用途。当然,UUID和令牌都可以由随机位和字节组成。然而,这更多的是关于为工作使用正确的工具
如果您正在创建一个密钥,而不是令牌或UUID,那么我更喜欢使用特定于API的方法来生成密钥。否则,最好直接使用
SystemRandom
,因为密钥既不是UUID也不是令牌。这是否回答了您的问题?此外,如果您认为关于UUID生成的文档不充分,并且您认为应该说明uuid4
生成加密随机UUID,您可以在bugs.python.org上提交问题,也许有一个关于如何改进文档的建议。如果UUID不是完全随机的,那么python库是否像它承诺的那样提供了真正的安全性?好吧,它从操作系统特定的随机数生成器中获取随机字节。我想你在这方面不会错得太多。