1

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

4

1 回答 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 回答