0

0

Python 随机数在安全场景下的误用

冷漠man

冷漠man

发布时间:2026-02-20 14:51:26

|

685人浏览过

|

来源于php中文网

原创

使用 random 模块生成密码或 token 是安全漏洞,因其基于可预测的 mersenne twister 算法;应改用 secrets 模块,如 secrets.token_urlsafe() 或 secrets.token_bytes()。

python 随机数在安全场景下的误用

random 生成密码或 token 就是漏洞

Python 标准库的 random 模块不是密码学安全的——它用的是 Mersenne Twister 算法,可被预测。只要知道几个输出值,就能反推出内部状态,进而预测后续所有“随机”结果。

常见错误现象:random.choice() 选验证码、random.randint() 生成 API key、random.shuffle() 洗牌敏感数据。

  • 使用场景:生成 session id、重置令牌、加密盐值、一次性密码(TOTP 种子)
  • 正确做法:一律换用 secrets 模块,它是专为安全场景设计的
  • 示例对比:random.SystemRandom().randint(1, 100) 虽调用系统熵源,但接口仍绕不开 random 的抽象层,不推荐;直接用 secrets.randbelow(100) + 1 更稳妥

secrets.token_urlsafe()secrets.token_hex() 怎么选

两者都基于操作系统提供的加密安全随机数生成器(如 Linux 的 /dev/urandom),但编码方式和适用场景不同。

工资查查移动工资条
工资查查移动工资条

大部分的工资还是以打印工资条的形式进行,偶有公司使用邮件发放工资条,而工资条的现代形式应该是移动工资条,以实现信息的备忘、到达、管理、对帐、环保、高效等需求……,用户已经习惯使用手机(或以其它移动方式)实现一切需求,应用的移动化是大势所趋。工资查查就在这样的背景下诞生,北京亦卓科技于2017的开发并推出了微信小程序工资查查。由于对有用户对数据隐私与安全性的考虑,北京亦卓科技在推出了云端应用--工资

下载
  • token_urlsafe() 返回 Base64Url 编码字符串(不含 +/=),适合放在 URL、HTTP header、文件名里
  • token_hex() 返回纯十六进制字符串,长度是字节数的两倍(如 secrets.token_hex(16) → 32 字符),适合存数据库或做对称密钥材料
  • 性能差异极小,别纠结;但注意:不要用 secrets.token_urlsafe(16) 当 AES 密钥——Base64Url 解码后只有 ~12 字节,不够 16/32 字节要求

在加密流程中混用 randomsecrets 会出事

哪怕只有一处用了 random,整个链路的安全性就归零。典型误用是“主逻辑用 secrets,但 IV 或 nonce 用 random.getrandbits()”。

立即学习Python免费学习笔记(深入)”;

  • IV/nonce 必须不可预测且唯一,random.getrandbits(128) 输出可被还原,攻击者能复现加密流
  • Fernet、cryptography 库的某些高阶封装(如 Fernet.generate_key())内部已用 secrets,但你自己手写 AES-GCM 时,os.urandom()secrets.token_bytes() 才是唯一选择
  • 兼容性提醒:Python secrets 模块,必须降级用 os.urandom(),别 fallback 到 random

测试环境里还用 secrets?小心 CI 失败

CI 环境(尤其是某些容器化 runner)可能限制对熵池的访问,导致 secretsOSError: [Errno 24] Too many open files 或卡住。

  • 这不是代码 bug,是环境配置问题;但更常见的坑是:开发者为让测试过掉,偷偷把生产用的 secrets.token_urlsafe() 替换成 random.choices('abc123', k=16)
  • 正确解法:测试中保留 secrets 调用,但用 pytest 的 fixture 或 unittest.mock.patch 替换其底层熵源(mock os.urandom),而非替换模块行为本身
  • 容易被忽略的一点:Docker 默认限制 /dev/random,但 /dev/urandom 是 OK 的;如果真遇到阻塞,先查是否误配了 RANDOM_DEVICE 环境变量或挂载了只读 /dev
事情说清了就结束。真正难的不是记住该用哪个函数,而是每次写到“随机”二字时,下意识停半秒:这地方崩了,用户密码会不会被批量猜出来。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

328

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

773

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6403

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

836

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1086

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1644

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

594

2023.08.03

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

776

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号