产生随机数的方法

justoday 2007-01-20 10:22:10
各位大牛, 除了Random,
还有其他方法得到随机数吗?

Random 公式算出来的伪随机数很容易破解, 不敢用

0. 原理上不能破解
1. 随机的范围不需要很大(1~100就够用了)
2. 每个值原理上均匀分部


----------------
能想到的一个方法是
取CPU 的内部定时器的值求余

Function RndNum(qRang : word) : word;
var
Cnt : int64;
begin
if qRang < 1 then qRang := 1;
asm
rdtsc
mov DWORD PTR Cnt, EAX
mov DWORD PTR (Cnt+4), EDX
end;
Result := Cnt mod qRang;
end;

不知道这种方法是不是可行
是不是经的起推敲
...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dovelee 2007-01-20
  • 打赏
  • 举报
回复
mark
do2008 2007-01-20
  • 打赏
  • 举报
回复
8错,有新意~~~
justoday 2007-01-20
  • 打赏
  • 举报
回复
这种方法随机的原理是
用rdtsc得到 CPU 内部定时器的值(每经过一个 CPU 周期, 这个定时器就加一)
1.每次调用这个函数的时候,间隔的CPU周期是随机的
2.得到的值的余数是随机的
justoday 2007-01-20
  • 打赏
  • 举报
回复
zzzl(不拉拉链)

帮忙测试一下, 看看,
1. 产生的随机数是不是合理
2. 存在的破解可能
0. 如果有其他已经验证过的办法,那最好不过了
Function RndNum(qRang : word) : word;
var
Cnt : int64;
begin
if qRang < 1 then qRang := 1;
asm
rdtsc
mov DWORD PTR Cnt, EAX
mov DWORD PTR (Cnt+4), EDX
end;
Result := Cnt mod qRang;
end;

justoday 2007-01-20
  • 打赏
  • 举报
回复
外加一条,
必须,在一般的机器上,任何时刻适合以这些规则-_-
0. 原理上不能破解
2. 每个值原理上均匀分部

hash你现在屏幕上的象素信息 ----- 好像行不通
得到主板检测的热量(如果你的主板有这种API的话)
------我查一下,看看,是不是大多主板支持这个功能


zzzl 2007-01-20
  • 打赏
  • 举报
回复
方法太多了,^_^

hash你现在屏幕上的象素信息
得到主板检测的热量(如果你的主板有这种API的话)
哈希csdn上的滚动新闻标题
...

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧