
随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
- 中文名称 随机种子
- 外文名称 Random Seed
- 类别 计算机术语
- 对象 随机数
- 条件 真随机数(种子)为初始条件
计算方法
一般种子可以以当前相烈食流广达攻的系统时间,这是完全随机的
来自 算法1:平方取中法。
1)将种子设为X0,并mod 10000得到4位360百科数
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()
通计 系统启动以来的嘀嗒时间
说明:该时间与系激局践斗完找湖后所一统运行时长相关,
⒉GetC异茶级百台尼urrentProcessId()
当前进程Id号
说明:该Id与系统启动进程数量及次序有关,一般波动范围较小。
⒊GetCurrentProcess()
当前进程句柄
说明:该句柄住育实质就是内存地址,但每次进程启动时地址值是不确定的。
⒋GetProcessTimes()
进程时间参数
专跑齐据什爱市直运说明:-
⒌GetCurrentThreadId()
当前线程Id号
⒍GetCurrentThread()
当前线程句柄
⒎GetThreadTimes()
线程时间参数
⒏GetCurr圆样班相善氢冲独身厂个entHwProfile()
Profile配置文件
⒐GetSysColor()
系统Color
⒑GetSystemInfo()
系统信息
笑审小七增草烟学他法 ⒒GetSystemPowerStatus()
电源状态
⒓GetKeyboardState()
键盘状态
⒔GlobalMemoryStatus()
内存状态
⒕time()
当前时间 秒
⒖GUID
各硬件设备GUID
⒗MAC
网卡mac
属按物判互⒘CPUID
CPU Id号
⒙声卡录音噪音
该停段造与这参量与环境相关
⒚用户键盘间隔时间
该参量与用户习惯相关
其次,尽最大可能增加这些因素的维度。这里说的维度是及升离字指
种子结果与因素之间的关联程度。一般使用h材督双季ash函数对多个
因素进行哈希运算。这样得到的种子具有较强的散照责列特性。
通过以上技术手段得到的种子产生的伪随机数是具有较好
统计术伯款着板特性的,它不依赖于某一台机器,某一时刻,某一方法,
而是复杂多变、让人捉摸不透难于重现的。