【问题标题】:What does binascii.hexlify(os.urandom(32)).decode() mean?binascii.hexlify(os.urandom(32)).decode() 是什么意思?
【发布时间】:2020-03-21 16:07:01
【问题描述】:

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

【问题讨论】:

    标签: django django-rest-framework auth-token binascii


    【解决方案1】:

    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 检索原始随机字节,这应该是(加密的)安全随机性。

    【讨论】:

    • 好的,如果我需要在一段时间后使用相同的语句更改其内容,它是否仍会生成唯一密钥
    • @GaganSingh 是的。
    • 我知道接受,抱歉迟到了,谢谢解释
    猜你喜欢
    • 2014-03-10
    • 2011-06-21
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    相关资源
    最近更新 更多