我正在尝试开发一个函数,该函数可以在django rest框架中刷新token
模型。他们似乎使用binascii.hexlify(os.urandom(32)).decode()
为每个用户生成唯一的令牌。此行如何确保它生成的令牌始终是唯一的。假设如果我想每 10 个月刷新一次令牌的内容,那么,binascii.hexlify(os.urandom(32)).decode()
会生成任何当前用户尚未使用的唯一密钥,或者我需要检查它是否正在使用?
>help(os.urandom)
说:
返回一个字节对象,其中包含适合加密使用的随机字节。
在 Linux 上,这将使用/dev/urandom
字符设备,该设备旨在加密安全。只有当熵池尚未初始化1时,它才会无法生成,因此将是启动的早期阶段。但是,一旦它被初始化并从以前的种子、设备驱动器等中播种,您将生成加密等级的随机性。
还要检查man 4 urandom
。
对于这些情况,存在 1getrandom(2)
系统调用,这与从/dev/urandom
读取不同
binascii.hexlify(os.urandom(32)).decode()
:
os.urandom(32)
返回 32 字节的随机数据binascii.hexlify
返回字节的十六进制重复- 由于从
hexlify
返回的是字节,我们需要decode
它才能得到字符串
因此,由于从os.urandom
中检索原始随机字节,这应该是(加密(安全的随机性。