python中uuid4和秘密token_bytes有什么区别?

2024-02-15

检查了两者的cpython源代码secrets https://github.com/python/cpython/blob/master/Lib/secrets.py and uuid4 https://github.com/python/cpython/blob/master/Lib/uuid.py。两者似乎都在使用 os.urandom。

#uuid.py
def uuid4():
    """Generate a random UUID."""
    return UUID(bytes=os.urandom(16), version=4)

#secrets.py
def token_bytes(nbytes=None):
    """Return a random byte string containing *nbytes* bytes.
    If *nbytes* is ``None`` or not supplied, a reasonable
    default is used.
    >>> token_bytes(16)  #doctest:+SKIP
    b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b'
    """
    if nbytes is None:
        nbytes = DEFAULT_ENTROPY
    return _sysrand.randbytes(nbytes)

# This is code for randbytes in SystemRandom in random
 def randbytes(self, n):
        """Generate n random bytes."""
        # os.urandom(n) fails with ValueError for n < 0
        # and returns an empty bytes string for n == 0.
        return _urandom(n)

IETF 警告不要使用 uuid 来实现安全功能。请参阅第 6 节UUID https://www.rfc-editor.org/rfc/rfc4122#section-6。 它说

  1. 安全考虑

不要假设 UUID 很难猜测;不应该使用它们 作为安全功能(仅拥有即可授予的标识符 访问),例如。可预测的随机数源将 加剧局势。

如果 Secrets 确实使用与 uuid4 相同的 urandom,我们可以使用 uuid4 代替 Secrets 吗?使用秘密 token_bytes 而不是 uuid4 本身的全部目的是什么?根据 IETF 的标准,API 密钥/令牌的秘密模块真的不安全吗?


您可能会惊讶地发现随机 UUID 并不是完全随机的。准确地说,有 6 位设置为特定值(以indicate它是一个随机 UID)。他们被创造出来是为了unique(具有高度确定性)。 UUID 有特定的用途,因此您会发现在它们上定义的各种方法。

此外,顾名思义,它们不是meant成为秘密。这也可能意味着没有采取适用于秘密的可能的保护措施。例如,字符串通常很容易在内存中找到,并且 UUID 经常以文本表示形式使用/传达。

令牌是不同的东西。它通常被加密并保密。因此,它有不同的目的。当然,UUID 和令牌都可以由随机位和字节组成。然而,这更多的是关于使用正确的工具来完成工作。

如果您要创建密钥而不是令牌或 UUID,我更喜欢使用特定于 API 的方法来生成密钥。否则使用可能是个好主意SystemRandom直接,因为密钥既不是 UUID 也不是 Token。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中uuid4和秘密token_bytes有什么区别? 的相关文章

随机推荐

  • 替换MySQL中的所有字段

    我需要使用以下命令替换表列中的一些字符REPLACE命令 我知道REPLACE命令需要列名 然后是要更改的文本 在以下示例中为 a 字符 和新文本 在以下示例中为 e 字符 UPDATE my table SET my column REP
  • 动态捕获 CPU 和内存使用情况

    我正在运行 shell 脚本来执行 C 应用程序 该应用程序测量 api 的性能 我可以捕获 API 的延迟 返回给定参数集的值所需的时间 但我也希望以 5 10 秒的间隔捕获 CPU 和内存使用情况 有没有一种方法可以做到这一点 而又不会
  • 如何与其他进程共享现有的 char * ?

    我正在尝试使用其他分叉 执行的进程共享一些内存shmget and shmat char test test int shID char shptr key t shkey 2404 shID shmget shkey sizeof cha
  • PAnsiChar 和 PChar 的区别

    PAnsiChar 和 PChar 之间有区别吗 是什么类型 德尔福2007年之前 先感谢您 D2009 及之后 是的 有 PChar是一个指向 a 的指针Char这是一个 unicode 字符 aWideChar And PAnsiCha
  • 如何启用 PostgreSQL 函数分析器?

    这花了我一段时间才弄清楚 几周前我在一个外语维基上找到了答案 它非常有帮助 所以我想我会分享 在 Win32 上的 PostgreSQL 8 3 上 默认情况下会安装分析插件 但不会加载 只需执行以下 SQL LOAD libdir plu
  • 如何设计轮播点样式?

    我如何将我的旋转木马点设计成这样 这是我现在所拥有的 这是我的风格 slick dots position absolute bottom 45px list style none display block text align cent
  • 在生产 Java 服务器中打开 GC 日志记录是常见做法吗?

    我在一些地方 1 看到人们在生产服务器 关键任务 中启动 GC 日志记录 例如 java server Xms1024m Xmx1024m XX NewSize 256m XX MaxNewSize 256m XX UseConcMarkS
  • 当我点击它们时如何更改圆半径(使用 Three.js)?

    我有以下 JavaScript 代码 取自一个示例 它绘制了一些圆圈 当您单击其中一个圆圈时 它会改变颜色 但我还想在单击该圆圈时更改该圆圈的半径 大小 并保持其他圆圈不变 这文档 https threejs org docs index
  • 如何解码 HTML 实体?

    这是一个 Perl 快速问题 如何转换 HTML 特殊字符 例如 uuml or 039 转换为普通 ASCII 文本 我从这样的事情开始 s d chr 1 eg 并且可以为所有 HTML 字符编写它 但是像这样的函数可能已经存在 请注意
  • 在按下和释放鼠标时绘制矩形,opengl

    我试图根据用户输入绘制一个矩形 该矩形从左键单击收集 x1 y1 坐标 然后从左键单击的释放指定 x2 y2 我成功保存了基于此鼠标操作的坐标 基于确认保存坐标的 cout 这是我尝试过的 请记住 没有任何崩溃 因此存在逻辑错误 void
  • 如何使用 Factorplot 用分类值注释条形或绘制 4 个变量?

    我有一个要绘制的数据框 我想到了两个选择 检查图像 对于选项 1 我需要注释一个分类值 Elec 对于选项 2 我仍然需要使用 factorplot 但我不知道如何修复收到的错误 CODE FOR THE DATAFRAME raw dat
  • Bootstrap 4 有内置水平分隔线吗?

    Bootstrap 4 有内置水平分隔线吗 我可以做这个 但我想使用内置的 bootstrap css 我在文档中找不到它 也许我错过了它 HTML 已经有一个内置的水平分隔符 称为 hr 水平规则 的缩写 Bootstrap 风格像这样
  • 哪些方法可以访问源代码?

    有多种方法可以从需要 加载该库的 Ruby 代码中访问该库的源代码 其中 有的直接读取库文件并解析 其他人通过一些内置方法访问源代码 这些方法提供有关源代码的信息 例如抽象语法树 在我无法直接读取文件内容的情况下 如前面的方式 访问源的唯一
  • 如何使用公共类上的静态变量在活动之间传递数据?

    我试图在公共类上使用静态变量来在活动之间传递它们 我在这样做时遇到了一个罕见的问题 我正在为活动的静态变量赋予值 此活动调用 GLSurfaceView 并监听屏幕方向的变化 如果我为 GLSurfaceView 上的静态变量赋予值 那么一
  • iOS 如何保存录制的音频?

    我正在开发一个应用程序 其中音频被录制并转录为文本 我正在使用 Nuance Developers 提供的 Speechkit 我要添加的功能是 将录制的音频文件保存到永久内存 在表格视图中显示音频文件 稍后加载保存的音频文件 播放音频文件
  • 从 MPEG TS 中提取 PCR 时间值

    我正在尝试从 MPEG TS 数据包中提取 PCR 时间值 根据wiki http en wikipedia org wiki MPEG transport stream PCR 包含 33 6 9 位 并且还指出前 33 位基于 90 k
  • 将文件插入 Google Drive 时出现 IOException

    我在将图像发布到 Google 云端硬盘时遇到以下问题 java io IOException insufficient data written at sun net www protocol http HttpURLConnection
  • locationManager didUpdateLocations 在设备上触发两次,在模拟器上仅触发一次

    相同的代码 我假设设备实际上由于某种原因更新了位置两次 即使我只调用 startUpdatingLocation 一次并且在 didUpdateLocations 内部运行一些 stopUpdatingLocations func loca
  • 如何在 Android Jetpack Compose 中使用字符串资源?

    让我有以下内容strings xml资源文件
  • python中uuid4和秘密token_bytes有什么区别?

    检查了两者的cpython源代码secrets https github com python cpython blob master Lib secrets py and uuid4 https github com python cpy