首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

什么样参数的伪随机数算法,才是最随机的?该怎么处理

2012-04-08 
什么样参数的伪随机数算法,才是最随机的?线性同余算法,涉及2个参数:seed seed * a + b参数a、b分别取什么

什么样参数的伪随机数算法,才是最随机的?
线性同余算法,涉及2个参数:seed = seed * a + b
参数a、b分别取什么值,算法的随机效果最好呢?
delphi以及最常用的c的随机函数都是:a=0x08088405,b=1
为什么它们才会随机效果最好呢?

就像des算法里的参数,为什么现在采用的才是加密效果(混得最乱,最难反推)最好的呢?


Delphi(Pascal) code
随机数├生成算法│└线性同余│  ├seed=(seed*0x08088405)+1│  └ret=int64(dword(seed))*imax shr 32└验证算法  └NIST SP800-22标准中16种检验方法    ├频数检验    ├块内频数检验    ├游程检验    ├块内最长游程检验    ├二元矩阵秩检验    ├离散傅立叶变换检验    ├非重叠模板匹配检验    ├重叠模板匹配检验    ├Maurer的通用统计检验    ├Lempel-Ziv压缩检验    ├线性复杂度检验    ├序列检验    ├近似熵检验    ├累加和检验    ├随机游动检验    └随机游动状态频数检验

上面列的16种检验方法,有现成的检测代码吗?
需要生成连续几百兆的伪随机数内容到文件,给专门的检测工具取检测?

[解决办法]
Delphi 下有个 Random ,在采集大量数据后,用 Excel 画一下点分布图。
结果可以看到,覆盖面并不均匀,就像瘌痢头,东一块西一块的。
这个就是伪随机数。
事实上,在 VC,VB 等一系列工具下,都得的都是这个样子。
[解决办法]
有本《Applied Cryptography》的书,里面专门有一章谈伪随机算法的,网上应该不难找到吧
[解决办法]
我来推荐一下。
[解决办法]
额~~求解
[解决办法]
可以获取当前用户的鼠标指针位置然后计算得到,这样的结果不是伪随机数,
我记得好像(某种)证书用的加密方法就是需要用户移动鼠标位置得到的随机数然后计算的,的确比较"随机"
或者从用户那里得到其他的人所产生的数,然后计算随机,我觉得应该也会好一些
我对之也不是很了解,只是自己的一点见解而已
[解决办法]
C语言C++都有的,我现在有个C#的,给大家,这个程序的任务是自动生成加减算术。下面是完整代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace 随机数字
{
 
public partial class Form1 : Form
{
double y;
private SqlConnection con = null;
private SqlCommand cmd=null;
private SqlDataAdapter dapt=null;
private DataSet ds=null;

Random ra = new Random();
int a;
string ss;
double d;
int a2;
public Form1()
{

InitializeComponent();
label8.Visible = false;




label1.Text = ra.Next(0,50).ToString();
label3.Text = ra.Next(0,50).ToString();
int a = ra.Next(50) % 4;
switch (a)
{
case 0: label2.Text = "+"; d=Convert.ToInt32(label1.Text)+Convert.ToInt32(label3.Text);break;
case 1: label2.Text = "-";d=Convert.ToInt32(label1.Text)-Convert.ToInt32(label3.Text); break;
case 2: label2.Text = "×";d=Convert.ToInt32(label1.Text)*Convert.ToInt32(label3.Text); break;
case 3: label2.Text = "/";label3.Text = ra.Next(0, 50).ToString(); d = Convert.ToInt32(label1.Text) / Convert.ToDouble(label3.Text); break;
}





}
int w=0;

private void textBox1_TextChanged(object sender, EventArgs e)
{

if (textBox1.Text == d.ToString("f3") || textBox1.Text == d.ToString())
{
a2 += 10;
label7.Text = "得分:" + a2;
w++;
label8.Text += "\n第" + w + "题: " + label1.Text + label2.Text + label3.Text +"="+ textBox1.Text ;
label7.ForeColor = Color.Red;
textBox1.Clear();


label1.Text = ra.Next(0,50).ToString();
label3.Text = ra.Next(0,50).ToString();
a = ra.Next(50) % 4;
switch (a)
{
case 0: label2.Text = "+"; d = Convert.ToInt32(label1.Text) + Convert.ToInt32(label3.Text); break;
case 1: label2.Text = "-"; d = Convert.ToInt32(label1.Text) - Convert.ToInt32(label3.Text); break;
case 2: label2.Text = "×"; d = Convert.ToInt32(label1.Text) * Convert.ToInt32(label3.Text); break;
case 3: label2.Text = "/"; label3.Text = ra.Next(1, 50).ToString(); d = Convert.ToInt32(label1.Text) / Convert.ToDouble(label3.Text); break;
}



}


}
private void button1_Click(object sender, EventArgs e)
{


if(Convert.ToDouble(d.ToString("f5"))!=d)
label10.Text = label1.Text + label2.Text + label3.Text + "=" + d.ToString("f3");
else
label10.Text = label1.Text + label2.Text + label3.Text + "=" + d.ToString();


label10.ForeColor = Color.IndianRed;
textBox1.Clear();
textBox1.Focus();
label1.Text = ra.Next(0, 50).ToString();
label3.Text = ra.Next(0, 50).ToString();

a = ra.Next(50) % 4;

switch (a)
{
case 0: label2.Text = "+"; d = Convert.ToInt32(label1.Text) + Convert.ToInt32(label3.Text); break;
case 1: label2.Text = "-"; d = Convert.ToInt32(label1.Text) - Convert.ToInt32(label3.Text); break;
case 2: label2.Text = "×"; d = Convert.ToInt32(label1.Text) * Convert.ToInt32(label3.Text); break;
case 3: label2.Text = "/"; label3.Text = ra.Next(1, 50).ToString(); d = Convert.ToInt32(label1.Text) / Convert.ToDouble(label3.Text); break;
}




}

private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
int v;
private void button3_Click(object sender, EventArgs e)
{
v++;
if (v % 2 != 0)
label8.Visible = true;
else
label8.Visible = false;
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
File.WriteAllText(@"C:\Documents and Settings\io\桌面\新建 写入.txt",label8.Text );

}



}

}
[解决办法]
good!
[解决办法]
好东西
[解决办法]
a 取 31 或 37 是不错的选择,b 取何值不太重要,可以随意取。
[解决办法]
Delphi 下有个 Random ,在采集大量数据后,用 Excel 画一下点分布图。
结果可以看到,覆盖面并不均匀,就像瘌痢头,东一块西一块的。
这个就是伪随机数。
事实上,在 VC,VB 等一系列工具下,都得的都是这个样子。
[解决办法]
看了我头晕.
[解决办法]

这本书的第3章随机数,建议LZ可以看看。
[解决办法]
我想问一问如用multiple recursive PRNG的例子
s0至s2,t0至t2先给定好
s3= (s1 * a - s0 * b) % c
t3= (t2 * d - t0 * e) % f
seed= (s3-t3)% g


这样的应该如何实现?效果如何?

[解决办法]
随机数,
http://topic.csdn.net/t/20061216/16/5235342.html
其实有两个随机函数的。

[解决办法]
有本《Applied Cryptography》的书,里面专门有一章谈伪随机算法的,
[解决办法]

探讨

引用:
我想问一问如用multiple recursive PRNG的例子
s0至s2,t0至t2先给定好
s3= (s1 * a - s0 * b) % c
t3= (t2 * d - t0 * e) % f
seed= (s3-t3)% g
这样的应该如何实现?效果如何?


没有用到t1和s2啊?
这3行代码是第一次生成种子时……

[解决办法]
DES算法里的参数,是经过反复验证的,通过扩散和混淆使密匙的影响最大,至于随机数,有一些之所以好是因为没有证据表明它不好
[解决办法]
完全平均不是随机的说。
不信你将红豆绿豆各一斤闭着眼睛搅和10分钟,然后再看看均匀不均匀。
[解决办法]
drbg检查伪随机数,需要128兆已生成的数据。
[解决办法]
我得弄点分了,,不然不让下东西了
[解决办法]
“最随机”……蛋疼- -...
随便转了篇...
http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FScience%2F6%2Fmath%2Fgailv1%2Fsuijiguocheng%2FM.1176097547.n0

热点排行