当前位置: 首页 > news >正文

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

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.gsyq.cn/news/41648.html

相关文章:

  • 2025年11月沈阳代理记账公司排行榜:专业顾问的深度推荐
  • Chronic disease
  • 11.6 1.基础HTTPGET接口请求测试
  • 2025年11月学习机品牌推荐榜:清北双师与AI精准学排行盘点
  • Linux - 压缩解压篇
  • P2416 泡芙 题解
  • post表单提交接口测试
  • AI元人文构想:人机共生智慧文明治理新范式整理报告
  • 2025年湖南专利申请公司权威推荐榜单:期刊论文公司/专著合著出版公司/重点课题申报服务机构精选
  • 基础HTTP GET接口请求测试
  • HTTPPOST表单提交接口测试
  • 能变声的录放音语音芯片WT2003Hx
  • 2025年知名的多品种小批量零件机械加工TOP实力厂家推荐榜
  • 2025年智能铝合金门窗定制厂家权威推荐榜单:智能门窗控制系统/高性能系统门窗/高性能节能门窗源头厂家精选
  • 2025年铝合金锯片厂家权威推荐榜单:超薄铝用锯片/断桥铝锯片/金刚石锯片源头厂家精选
  • MySQL中如何定位慢查询?explain命令
  • 2025年6月deepseek关键词排名优化品牌榜:五家服务商数据对照解析
  • 2025年口碑好的进口制冷压缩机优质厂家推荐榜单
  • 2025年铝合金锯片厂家权威推荐榜单:铝全金门窗锯片/切散热器锯片/金刚石锯片源头厂家精选
  • 2025 年 11 月微晶石墨粉,导电石墨粉,鳞片石墨粉厂家最新推荐,精准检测与稳定性能深度解析!
  • 2025年知名的Cr12MoV模具钢最新TOP厂家排名
  • 2018年下半年试题四:论NoSQL数据库手艺及其应用
  • 2025 年 11 月展厅设计公司权威推荐榜:企业展厅/数字展厅/科技展馆/全屋定制展厅设计制作,专业策划与创意呈现口碑之选
  • 2025年热门的太空梭游乐设施用户口碑最好的厂家榜
  • 2025年比较好的赛事旗帜定制热门厂家推荐榜单
  • 2025 年 11 月开窗器厂家推荐排行榜,开窗器链条,开窗器机芯,开窗器配件,优质开窗器公司推荐
  • 2025 年最新推荐石墨粉生产厂家口碑榜单:甄选行业优质厂家解析产品品质与服务能力润滑石墨粉/土状石墨粉/高碳石墨粉公司推荐
  • 2025年知名的粉末TAIC交联剂厂家推荐及选择指南
  • 2025年质量好的dn40镀锌钢管厂家推荐及选择指南
  • 强强联合 | 利驰软件上海策永电气数字化项目启动会圆满举行