我正在尝试开发一个可以token
在 django rest 框架中刷新模型的函数。它们似乎binascii.hexlify(os.urandom(32)).decode()
用于为每个用户生成唯一的令牌。这条线如何确保它生成的令牌始终是唯一的。假设如果我想刷新每 10 个月后令牌的内容,然后,binascii.hexlify(os.urandom(32)).decode()
将生成尚未被任何当前用户使用的唯一密钥,或者我需要检查它是否正在使用?
问问题
560 次
1 回答
1
help(os.urandom)
说:
返回包含适合加密使用的随机字节的字节对象。
在 Linux 上,这将使用/dev/urandom
设计为加密安全的字符设备。只有当熵池尚未初始化1时,它才会生成失败,这将是启动的早期阶段。但是,一旦它被初始化并从先前的种子、设备驱动器等中播种,您将生成加密级别的随机性。
还要检查man 4 urandom
。
对于这些情况,有1 个 getrandom(2)
系统调用,与从/dev/urandom
.
binascii.hexlify(os.urandom(32)).decode()
:
os.urandom(32)
返回 32 字节的随机数据binascii.hexlify
返回字节的十六进制表示- 因为返回的
hexlify
是字节,所以我们需要decode
它来获取字符串
因此,当从中检索原始随机字节时,os.urandom
应该是(加密的)安全随机性。
于 2019-11-26T09:47:09.423 回答