android随机数app实验 告,随机数实验 告.doc

随机数实验 告

云南大学软件学院

实 验 告

班级:

课程名称 信息技术 实验目的 利用密码技术或者专门的随机数产生算法产生随机数,

并对产生的随机数进行统计分析

实验内容(算法、程序、步骤和方法)

设计一种随机数算法

利用上学期在密码技术中学到的RC4加密算法来实现此次随机数生成,此次实验主要用到的是RC4密钥流的产生过程。RC4每次生成一个0-255(8bit)的数字,本次统计随机数是将这个8bit的数字,分为两个4bit(0-15)的随机数来统计,统计的随机数的范围是从0-15。

实现该随机数算法

主要是利用RC4算法,该算法的原理和核心代码将在下面详细阐述:

初始化S:开始时,S中元素的值被置为按升序从0-255(unsigned char型),即S【0】=0,……,S【255】=255。同时建立一个临时向量T。设密钥长度为keylen字节,讲K的值赋给T的前kenlen个元素,并循环重复用K的值赋给T剩下的元素,直至T全部被赋值。具体实现过程如下:

//——初始化S数组和T数组

unchar S[256]={0};

unchar T[256]={0};

for(int i=0;i<256;i++)

{

S[i]=i;

T[i]=K[i%keylen];//循环复用K

}

然后用T长生的S的初始置换,从S【0】到S【255】,对每个S【i】,根据由T【i】确定的方案,将S【i】置换为S【i】中的另一字节,具体实现如下:

//——-用T数组影响S数组

int j=0;

int i;

for(i=0;i<256;i++)

{

j=(j+S[i]+T[i])%256;

Swap(&S[i],&S[j]);

}

向量S一旦完成初始化,输入密钥就不再被使用。密钥流的生成是从S【0】到S【255】,对每个S【i】,根据当前S的值,将S【i】与S中的另一个字节置换。当S【255】完成置换后,操作继续重复从S【0】开始:

//——随机数的产生

i=0;j=0;

int c[MAX]={0};//用来保存随机序列

for(int n=0;n

{

unchar t;//用来临时存储随机数的下标

unchar k;//产生的随机序列(一个字节)如:2f

i=(i+1)%256;

j=(j+S[i])%256;

Swap(&S[i],&S[j]);

t=(S[i]+S[j])%256;

k=S[t];

printf(“%x”,k);//以16机制形式显示在屏幕上

c[n]=k;//将生成的随机序列保存到数组c[n]中

}

对该算法产生的随机数进行统计,分析其效果

统计随机数的时候,一定要注意把生成的一个unsigned char的数字当成两个随机数统计,比如生成的数字时6b(16进制),就要当成6和b两个数字统计。

具体的统计过程的核心代码如下:

//——统计次数和频率

int n[16];//用来存储随机数(0-15)的次数

float f[16];//用来存储随机数(0-15)的频率

for(int i=0;i<16;i++)//初始化次数和频率

{

n[i]=0;

f[i]=0.0;

}

统计次数的这一个模块非常重要,一定要把生成的数据(unsigned char型)的数据当成两个随机数字来读,具体过程如下:

for(int i=0;i

{//统计次数

unchar temp=(unchar)c[i];

for(int j=0;j<2;j++)

{//先读低四位的16进制数,再读高四位的16机制数

int p=0;

p=temp%16;//低四位的16进制数,第二次循换就是高四位的16进制数

temp=temp/16;//得到高四位的16机制数

n[p]++;//对应次数加1

}

}

printf(“n”);

for(int i=0;i<16;i++)

{//计算频率

f[i]=(float)n[i]/(MAX*2);//因为生成的是MAX个8bit的数据,换成16进制(4bit)

//就是2MAX个16进制的数字了

}

for(int k=0;k<16;k++)

{

printf(“%2d出现的次数为:%2d , “,k,n[k]);

printf(“%2d出现的频率为:%fn”,k,f[k]);}

最后看看每个随机数出现了多少次,和随机数出现的次数在总的数字里占的比例

相关资源:国标软件设计文档(操作手册(GB8567——88),测试分析 告(GB8567…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月23日
下一篇 2021年4月23日

相关推荐