Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python中uuid4和U字节之间的区别是什么?_Python 3.x_Random_Cryptography_Operating System_Uuid - Fatal编程技术网

Python 3.x python中uuid4和U字节之间的区别是什么?

Python 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

检查了和的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 *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节。 上面说

  • 安全考虑

    不要认为UUID很难猜测;它们不应该被使用 作为安全功能(仅拥有就授予 访问),例如。一个可预测的随机数源将 使局势恶化


  • 如果秘密真的像uuid4一样使用Uradom,我们可以用uuid4代替秘密吗。使用秘密令牌_字节而不是uuid4本身的全部目的是什么?。根据IETF的标准,api密钥/令牌的机密模块真的不安全吗

    您可能会惊讶地发现随机UUID并不是完全随机的。精确地说,有6位设置为特定值(表示它是随机UID)。它们被创造为独特的(具有高度的确定性)。UUID有一个特定的用途,因此您可以找到在其上定义的各种方法

    此外,顾名思义,它们并不意味着是秘密。这也可能意味着不采取可能适用于保密的保护措施。例如,字符串通常很容易在内存中找到,UUID通常在文本表示中使用/通信

    代币是不同的东西。它通常是加密和保密的。因此,它有不同的用途。当然,UUID和令牌都可以由随机位和字节组成。然而,这更多的是关于为工作使用正确的工具


    如果您正在创建一个密钥,而不是令牌或UUID,那么我更喜欢使用特定于API的方法来生成密钥。否则,最好直接使用
    SystemRandom
    ,因为密钥既不是UUID也不是令牌。

    这是否回答了您的问题?此外,如果您认为关于UUID生成的文档不充分,并且您认为应该说明
    uuid4
    生成加密随机UUID,您可以在bugs.python.org上提交问题,也许有一个关于如何改进文档的建议。如果UUID不是完全随机的,那么python库是否像它承诺的那样提供了真正的安全性?好吧,它从操作系统特定的随机数生成器中获取随机字节。我想你在这方面不会错得太多。