随机种子

简介

编辑
一般计算机的 随机数都是 伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停 迭代产生随机数。

方法

编辑
一般种子可以以当前的系统时间,这是完全随机的
算法1: 平方取中法。
1)将种子设为X0,并mod 10000得到4位数
2)将它平方得到一个8位数(不足8位时前面补0)
3)取中间的4位数可得到下一个4位 随机数X1
4)重复1-3步,即可产生多个随机数
这个算法的一个主要缺点是最终它会退化成0,不能继续产生随机数。
算法2:线性同余法
1)将种子设为X0,
2)用一个算法X(n+1)=(a*X(n)+b) mod c产生X(n+1)
一般将c取得很大,可产生0到c-1之间的 伪随机数
该算法的一个缺点是会出现循环。
windows平台下,可以考虑将如下参数作为影响种子的因素。
⒈GetTickCount()
系统启动以来的嘀嗒时间
说明:该时间与系统运行时长相关,
⒉GetCurrentProcessId()
当前进程Id号
说明:该Id与系统启动进程数量及次序有关,一般波动范围较小。
⒊GetCurrentProcess()
当前进程句柄
说明:该句柄实质就是 内存地址,但每次进程启动时地址值是不确定的。
⒋GetProcessTimes()
进程时间参数
说明:-
⒌GetCurrentThreadId()
当前线程Id号
⒍GetCurrentThread()
当前线程句柄
⒎GetThreadTimes()
线程时间参数
⒏GetCurrentHwProfile()
Profile配置文件
⒐GetSysColor()
系统Color
⒑GetSystemInfo()
⒒GetSystemPowerStatus()
电源状态
⒓GetKeyboardState()
键盘状态
⒔GlobalMemoryStatus()
内存状态
⒕time()
当前时间 秒
⒖GUID
各硬件设备GUID
⒗MAC
网卡mac
⒘CPUID
CPU Id号
⒙声卡录音噪音
该参量与环境相关
⒚用户键盘间隔时间
该参量与用户习惯相关
其次,尽最大可能增加这些因素的 维度。这里说的维度是指
种子结果与因素之间的关联程度。一般使用 hash函数对多个
因素进行哈希运算。这样得到的种子具有较强的散列特性。
通过以上技术手段得到的种子产生的 伪随机数是具有较好
统计特性的,它不依赖于某一台机器,某一时刻,某一方法,
而是复杂多变、让人捉摸不透难于重现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值