我正在尝试开发一个可以token在 django rest 框架中刷新模型的函数。它们似乎binascii.hexlify(os.urandom(32)).decode()用于为每个用户生成唯一的令牌。这条线如何确保它生成的令牌始终是唯一的。假设如果我想刷新每 10 个月后令牌的内容,然后,binascii.hexlify(os.urandom(32)).decode()将生成尚未被任何当前用户使用的唯一密钥,或者我需要检查它是否正在使用?
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 回答