You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问这段随机字符串生成代码是否属于Cryptographically Secure Pseudo-Random Number Generator?

这段随机字符串生成代码是否具备密码学安全性?

你提供的代码如下:

CharLIST = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
def NEW(id_len):
    _id = ''
    while len(_id) < id_len:
        _id += random.choice(CharLIST)
    return _id
NEW(random.randint(50, 100))

结论很明确:这段代码无法生成密码学安全的伪随机数(CSPRNG),具体原因如下:

  • 你使用的random模块基于Mersenne Twister算法,这是一个确定性的伪随机数生成器。只要攻击者获取到足够多的输出片段,就能逆向推导出生成器的种子,进而完全预测后续所有生成的字符串,完全不符合密码学安全要求的「不可预测性」。
  • 肉眼观察200个结果觉得不可预测,只是因为你没有掌握破解该算法的方法,这并不代表它真的具备密码学安全性。
  • 密码学安全的随机数需要依赖系统级的安全随机源,Python中应该使用secrets模块而非random模块。

如果需要生成具备密码学安全性的随机字符串,可以修改代码如下:

import secrets

CharLIST = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
def NEW(id_len):
    _id = ''
    while len(_id) < id_len:
        _id += secrets.choice(CharLIST)
    return _id

# 生成50到100之间的随机长度
NEW(secrets.randbelow(51) + 50)

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:42:18