Windows系统真随机数生成器实现

news/2025/11/6 11:07:10/文章来源:https://www.cnblogs.com/luminescence/p/19195611

Windows BCryptGenRandom 真随机数生成器

基于Windows Cryptography API: Next Generation (CNG)

Windows CNG API

_bcrypt = ctypes.WinDLL("bcrypt")
BCryptGenRandom = _bcrypt.BCryptGenRandom
BCryptGenRandom.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_ulong, ctypes.c_ulong]
BCryptGenRandom.restype = ctypes.c_ulong
  • 直接调用Windows底层的bcrypt.dll
  • 明确定义C函数参数和返回类型
  • 检查API调用状态码

基础字节生成 (_gen_bytes)

def _gen_bytes(self, n: int) -> bytes:if n <= 0:return b""buf = ctypes.create_string_buffer(n)status = BCryptGenRandom(None, buf, ctypes.c_ulong(n), ctypes.c_ulong(BCRYPT_USE_SYSTEM_PREFERRED_RNG))if status != 0:raise OSError(f"BCryptGenRandom failed with status 0x{status:08X}")return buf.raw
  • BCRYPT_USE_SYSTEM_PREFERRED_RNG系统选择最佳熵源
  • 零拷贝返回
  • 将非零状态码视为错误

2.2 精确比特控制 (random_bits_bytes)

def random_bits_bytes(self, n_bits: int) -> bytes:if n_bits <= 0:return b""n_bytes = (n_bits + 7) // 8  # 向上取整计算字节数data = self._gen_bytes(n_bytes)excess_bits = n_bytes * 8 - n_bitsif excess_bits:as_int = int.from_bytes(data, "big")as_int &= (1 << (n_bytes * 8 - excess_bits)) - 1  # 掩码清除data = as_int.to_bytes(n_bytes, "big")return data

比特字符串生成 (random_bits_str)

def random_bits_str(self, n_bits: int) -> str:b = self.random_bits_bytes(n_bits)bitstr = bin(int.from_bytes(b, "big"))[2:].rjust(len(b) * 8, "0")return bitstr[:n_bits]
  1. 获取精确比特数的字节数据
  2. 转换为二进制字符串表示
  3. 填充前导零确保完整字节表示
  4. 截取精确的比特数

均匀分布整数生成 (randint)

def randint(self, a: int, b: int) -> int:if a > b:raise ValueError("")width = b - a + 1if width == 1:return abits = width.bit_length()bytes_needed = (bits + 7) // 8while True:rnd = int.from_bytes(self._gen_bytes(bytes_needed), "big")rnd &= (1 << bits) - 1  # 掩码到精确比特数if rnd < width:return a + rnd

拒绝采样算法:

  • 范围计算:width = b - a + 1 确定可能值的数量
  • 比特优化:仅生成必要的随机比特
  • 无偏保证:拒绝超出范围的值,确保均匀分布

熵源质量

Windows CNG提供的熵源包括:
硬件 RNG (Intel RDRAND/RDSEED)直接来自硬件的物理过程。
系统中断时序: 鼠标移动、键盘敲击、磁盘读写等硬件中断发生的时间点
硬件性能计数器 (HPC): CPU 周期、指令计数器等
用户输入事件: 鼠标的移动轨迹、按键的时间间隔等
网络数据包时序: 网络数据包到达网卡的时间差

调用

rng = TrueRNG()
encryption_key = rng.random_bytes(32)  # 256位AES密钥
# 随机密码盐
salt = rng.random_bytes(16)
# 会话ID
session_id = rng.random_bits_str(128)
# 随机端口号
port = rng.randint(1024, 65535)
# 随机选择
options = ['A', 'B', 'C', 'D']
random_choice = options[rng.randint(0, len(options)-1)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年全自动丝印机批发厂家权威推荐:手动拉网机/半自动丝印机/片装抖粉机源头厂商精选

全自动丝印机作为现代工业印刷的核心设备,凭借其高效生产能力、稳定印刷质量和广泛适用性,在广告制作、数码印花、PCB电子、包装印刷等领域发挥着不可替代的作用。本文将基于行业发展趋势,为您深入分析全自动丝印机…

2025年11月沈阳注册公司推荐榜:五大优质机构实力排行

在沈阳这座工业重镇创业兴业,注册公司是创业者面临的首要环节。随着营商环境持续优化,市场主体数量稳步增长,选择专业可靠的注册服务机构成为创业者的普遍需求。本文基于国家市场监管总局公开数据、辽宁省中小企业服…

修改京东title

1.找到filters,点击,再勾选 use filters2.设置断点break points3.点击actions中的run filterset now 4.点击规则 — 自动断点—在返回后5.重新请求京东网页,如图所示483行点击第483行,在响应面板里找到title标签,…

2025年11月沈阳代理记账公司排行榜:专业顾问的深度推荐

作为企业在沈阳发展的重要合作伙伴,选择一家专业的代理记账公司是许多创业者和企业管理者的共同需求。无论是初创企业需要规范的财务基础,还是成长型企业寻求更专业的财税支持,代理记账服务都能帮助企业降低运营成本…

高端网站设计的分水岭:为什么同样是官网,有的能留住用户,有的秒关?

高端网站设计的分水岭:为什么同样是官网,有的能留住用户,有的秒关?在高端品牌数字化竞争中,官网早已不是 “可有可无的名片”,而是 “用户决策的关键触点”。但现实是,同样定位高端的网站,有的能让用户停留 5 …

zlog5

1.单变量线性回归这是回归算法的绝对起点。仅涉及一个自变量和一个因变量,核心是拟合出最优直线来描述两者关系。重点掌握最小二乘法的原理、均方误差等基础评估指标,同时初步理解“损失函数” 这一核心概念,建立对…

Chronic disease

How long did the years past? But when we focus on the basic principles more, even algorithms also can be easily to be reviewed. of course, AI barely can do this perfectly.

11.6 1.基础HTTPGET接口请求测试

1. 打开JMeter,新建测试计划,右键添加“线程组”(线程数1、循环次数1)。2. 线程组下添加“HTTP请求”,服务器名称/IP填写httpbin.org,端口80,请求方法选GET,路径填写/get。3. 添加“察看结果树”监听器,点击运…

ICPC2023杭州个人题解

M. V-Diagram 题意:给定一个长度为 \(n\) 的数组 a,满足数组的大小呈V字排列(即中间某个地方的值最小,往两边依次单调递增),求其满足还是V字排列的子数组的最大的平均值。 限制条件:\(3\le n \le 310^5,1\le a…

2025年11月学习机品牌推荐榜:清北双师与AI精准学排行盘点

临近学期中段,家长群里最热的议题从“报哪门网课”变成“该选哪台学习机”。十一月的期中成绩刚公布,不少家庭发现孩子知识漏洞集中、校内节奏加快,原来靠打印卷子的“土法”已跟不上新课改的进度;同时,教育部《2…

2025年11月学习机品牌推荐:护眼大屏榜多维对比排行

开学季刚过,家长群里的讨论却热度不减:新课标教材更新、期中成绩波动、线上课程时间被严格限制,一连串变化让“在家怎么学”成为高频痛点。教育部《2024全国中小学生学习负担监测报告》显示,近六成家庭每天额外学习…

Linux - 压缩解压篇

工具 核心定位 本质功能 默认生成格式 关键限制 压缩gzip 单文件快速压缩工具 仅压缩 / 解压单个文件(无归档能力) .gz 不支持目录、不支持多文件合并压缩压缩: gzip 保留源文件加 -k进度加 -v解压: gunzip/gzip -…

2025年11月学习机品牌权威榜:读书郎领衔五强对比评测

“孩子放学回家,作业不会写、错题没人讲、预习没方向”——这是不少家庭在2025年新课改全面落地后遇到的共同场景。新课标强调核心素养与探究式学习,教材更新节奏加快,家长普遍反映“辅导难度陡增”。教育部《2024全…

2025年湖南网络工程师公司权威推荐:信息安全工程师/软考网站/信息系统监理师服务供应商精选

随着企业数字化转型进程加速,网络工程师服务在确保企业IT基础设施稳定性和安全性方面发挥着至关重要的作用。本文将基于行业发展趋势,为您深入分析湖南地区网络工程师服务市场,并精选2025年度表现优异的服务提供商,…

P2416 泡芙 题解

P2416 泡芙 题解P2416 泡芙 题解 题目传送门 我的博客 前言 笔者一开始写了一版 \(O(NQ)\) 的,竟然没有TLE?(但是WA了,且做法假了 本题做法:tarjan缩点+LCA。 思路 拿到这个题首先研究样例,发现样例中竟然有环。…

MySQL超大分页怎么处理?

MySQL超大分页怎么处理?超大分页通常发生在数据量大的情况下,使用LIMIT分页查询且需要排序时效率较低。可以通过覆盖索引和子查询来解决。首先查询数据的ID字段进行分页,然后根据ID列表用子查询来过滤只查询这些ID的…

2025年上海GEO公司权威推荐:GEO运营商/GEO搜索优化/AI搜索优化服务商精选

在AI搜索引擎快速迭代的背景下,GEO(地理定位优化)服务已成为企业精准营销的核心工具。根据行业数据统计,2025年全球GEO服务市场规模预计达到800亿美元,中国企业在地理定位优化领域的投入保持年均增长率12%-15% 的…

P14364 [CSP-S 2025] 员工招聘 / employ

没见过的一种 DP 类型,我们称它为贡献延后计算。 具体来说就是我们只关心选出来了些什么,至于这些东西的顺序我们在转移的时候不重复的钦定即可。 考虑本题设 \(f_{i, j, k}\) 表决策到前 \(i\) 场面试,有 \(j\) 个…

post表单提交接口测试

新建线程组(线程数1、循环次数1),添加“HTTP请求”,服务器httpbin.org,端口80,方法POST,路径/post 勾选“使用表单数据”,在参数栏添加2组数据(如username=test、password=123456)添加“察看结果树”,运行后…

2025年常州logo设计公司权威推荐榜单:商标logo设计/文字logo设计/品牌logo设计源头公司精选

在品牌竞争日益激烈的市场环境中,专业的logo设计已成为企业构建视觉识别、传递品牌价值的核心环节。根据行业报告数据,2025年全球VI设计市场年增长率预计达12%,中国企业,尤其是长三角地区对专业设计服务的需求旺盛…