在Python中为API令牌生成UUID

时间:2018-10-29 00:25:12

标签: python secret-key

我目前正在使用Python生成UUID,如下所示:

import uuid
import secrets

uuid.UUID(bytes=secrets.token_bytes(16))

可以安全用作API令牌或访问令牌吗?

1 个答案:

答案 0 :(得分:3)

可以说,您当前的方法是一种安全可靠的方法的两个原因:

  • 生成具有128位熵的重复id的概率为effectively nil。 (这是您正在使用的标准UUID大小。)
  • secrets是专门为生成具有密码强度的随机数而设计的; token_bytes()实际上只是对os.urandom()的调用,它依次从特定于操作系统的随机性源返回随机字节。*

一个建议-uuid.uui4()基本上做了同样的事情,而没有调用中介函数的开销:

# https://github.com/python/cpython/blob/3.5/Lib/uuid.py
def uuid4():
    """Generate a random UUID."""
    return UUID(bytes=os.urandom(16), version=4)

另一个建议,无论如何-您可以使用.hex生成的UUID对象来获得一个漂亮的非连字符字符串。

>>> uuid.uuid4().hex
'22c482ef3cd84c26bb49c0287828428f'

*在Unix上,它是/dev/urandom,它从诸如设备驱动程序之类的源中收集信息。即生成机器特有的乱码信息,但随机信息足够多,主机本身无法识别。