论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

大随机数生成器算法的研究与实现(论文+程序)

内容来自论文无忧网 www.paper51.com

图3 分别得到产生大随机数的输入随机数 copyright paper51.com

void CCreRndNum::GetTime() 内容来自论文无忧网 www.paper51.com

{

http://www.paper51.com

int i; paper51.com

FILETIME ft; 内容来自www.paper51.com

GetSystemTimeAsFileTime(&ft); copyright paper51.com

      for(i = 0; i < 32; i++) http://www.paper51.com

     {            DTi[31- i] = (char)((ft.dwHighDateTime >> i) & 0x01); // 取得各位的值

paper51.com

            DTi[63- i] = (char)((ft.dwLowDateTime >> i) & 0x01);      } 内容来自www.paper51.com

} 内容来自www.paper51.com

void CCreRndNum::GetVi() //得到64位的二进制随机数 http://www.paper51.com

{int i;

copyright paper51.com

   srand((unsigned)time(NULL));

http://www.paper51.com

   for (i = 0; i < 64; i++) copyright paper51.com

      {     Vi[i] = rand()%2;  }

paper51.com

} 内容来自论文无忧网 www.paper51.com

函数名:     Step_1

paper51.com

函数功能:   产生随机数第1步(见图1) 内容来自www.paper51.com

输入:       DTi(时间),K1,K2(密钥)

paper51.com

输出:      Result_1[64] 内容来自论文无忧网 www.paper51.com

调用函数:   MyDes::EDE()

copyright paper51.com

void CCreRndNum::Step_1()

内容来自论文无忧网 www.paper51.com

{    GetTime();   //得到时间二进制并保存在DTi中

copyright paper51.com

   GetKey();    //产生密钥并保存在KK1,KK2中

paper51.com

      CDESMyDes;

内容来自www.paper51.com

      MyDes.EDE(DTi, KK1, KK2, Result_1);  //三重DES加密(EDE)

内容来自www.paper51.com

}

copyright paper51.com

函数名:     Step_2 paper51.com

函数功能:   产生随机数第2步(见图1) copyright paper51.com

输入:      Result_1,Vi(第一次输入的随机数)

http://www.paper51.com

输出:      Result_2[64] 内容来自论文无忧网 www.paper51.com

void CCreRndNum::Step_2() 内容来自论文无忧网 www.paper51.com

{    inti;

copyright paper51.com

//之前已得到V0 paper51.com

      for(i = 0; i < 64; i++) copyright paper51.com

      {     Result_2[i] = Vi[i] ^Result_1[i];       } 内容来自论文无忧网 www.paper51.com

} paper51.com

函数名:     Step_3

http://www.paper51.com

函数功能:   产生随机数第3步(见图1) http://www.paper51.com

输入:      Result_2,K1,K2(密钥) 内容来自www.paper51.com

输出:      Result_3[64] http://www.paper51.com

调用函数:   MyDes::EDE()

http://www.paper51.com

void CCreRndNum::Step_3() 内容来自论文无忧网 www.paper51.com

{CDES MyDes;

内容来自www.paper51.com

MyDes.EDE(Result_2, KK1, KK2, Result_3); copyright paper51.com

}       内容来自www.paper51.com

函数名:     Step_4 内容来自www.paper51.com

函数功能:   产生随机数第4步 异或(见图1)

内容来自www.paper51.com

输入:      Result_1,Result_3 内容来自论文无忧网 www.paper51.com

输出:      Result_4[64] 内容来自论文无忧网 www.paper51.com

void CCreRndNum::Step_4() copyright paper51.com

{  int i;

http://www.paper51.com

  for (i =0; i < 64; i++) 内容来自www.paper51.com

  {         Result_4[i] = Result_1[i] ^ Result_3[i];}

http://www.paper51.com

} paper51.com

函数名:     Step_5 copyright paper51.com

函数功能:   产生随机数第5步(见图1) copyright paper51.com

输入:      Result_4,K1,K2(密钥)

http://www.paper51.com

输出:      Result_5[64] 内容来自www.paper51.com

调用函数:   MyDes::EDE

copyright paper51.com

void CCreRndNum::Step_5() 内容来自www.paper51.com

{CDES MyDes;

内容来自论文无忧网 www.paper51.com

MyDes.EDE (Result_4, KK1, KK2, Result_5);}

内容来自论文无忧网 www.paper51.com

函数名:     GetRandNumber 内容来自论文无忧网 www.paper51.com

函数功能:   产生随机数,保存在dwRndNum[33]中. http://www.paper51.com

输入:       无

内容来自论文无忧网 www.paper51.com

输出:      dwRndNum[33]

paper51.com

备注:       输出1025位二进制,故用33个DWORD型的数存放随机数.

内容来自论文无忧网 www.paper51.com

BOOL CCreRndNum::GetRandNumber(DWORD dwRndNum[])

内容来自www.paper51.com

{   GetVi(); 内容来自www.paper51.com

   int i,m; http://www.paper51.com

      for(m = 0; m < 17; m++)             //17轮产生1088(取1025)位的Ri

内容来自www.paper51.com

      {     Step_1();

内容来自www.paper51.com

          Step_2(); 内容来自www.paper51.com

          Step_3(); http://www.paper51.com

          for (i = 0; i < 64; i++) paper51.com

             {   Ri[(m << 6) + i] =Result_3[i];    //保存到1024bit的Ri中 }       

内容来自论文无忧网 www.paper51.com

          Step_4();

内容来自论文无忧网 www.paper51.com

          Step_5(); 内容来自论文无忧网 www.paper51.com

         for (i = 0; i < 64; i++)    //Vi+1自动赋给Vi

copyright paper51.com

             {   Vi[i] = Result_5[i];      }

内容来自www.paper51.com

      }  // end for

内容来自论文无忧网 www.paper51.com

   UINT temp; 内容来自www.paper51.com

      for( i = 0; i < 1024; i++)  //取第1~1024位 copyright paper51.com

      {     temp = (UINT)(i / 32);

内容来自论文无忧网 www.paper51.com

             if(i% 32 == 0) http://www.paper51.com

          dwRndNum[temp] =dwRndNum[temp] | (DWORD)Ri[i];

内容来自论文无忧网 www.paper51.com

          else

内容来自论文无忧网 www.paper51.com

          dwRndNum[temp] = dwRndNum[temp] << 1 | (DWORD)Ri[i]; copyright paper51.com

      }

paper51.com

      for(i=0;i<32;i++) copyright paper51.com

      {     while(dwRndNum[i]<2147483648)

内容来自www.paper51.com

             {dwRndNum[i]+=dwRndNum[i];} http://www.paper51.com

      }

http://www.paper51.com

   dwRndNum[32] &= (DWORD)Ri[1024]; //取第1025位,其余位为0 copyright paper51.com

      returnTRUE;  内容来自www.paper51.com

} copyright paper51.com

6 检验随机数

内容来自www.paper51.com

随机数检验方法有如下几种:

内容来自www.paper51.com

参数检验,检验其分布参数的观察值与理论值的差异显著性。 内容来自www.paper51.com

均匀性检验,又称频率检验,意在检验伪随机数的经验频率与理论频率的差异是否显著。

copyright paper51.com

独立性检验,即检验所产生的伪随机数的独立性和统计相关是否异常,包括相关关系检验和联列表检验等。 copyright paper51.com

组合规律检测,按随机数出现的先后次序,根据一定的规律组合,检验其组合的观察值与理值是不否有显著差异,包括距离检验和配套检验等。 paper51.com

游程检验,把随机数序列按一定的规则进行分类,分为正负游程检验和升降游程检验等。

copyright paper51.com

本程序采用了均匀性检测,即频率检测。

http://www.paper51.com

由于随机数是由16次循环得来。并且存放在32个数组中,所以取其中高位数组的值就可以判断是否满足均匀性检测。 copyright paper51.com

算法示意图: paper51.com

   

paper51.com

copyright paper51.com

                     图4 检验随机数足够随机

内容来自www.paper51.com

Int bb=0; http://www.paper51.com

bb++; http://www.paper51.com

    chars[40]; copyright paper51.com

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

paper51.com

       { http://www.paper51.com

              sprintf(s,"(%2d)  %10lX\r\n",i,dwn[i]); copyright paper51.com

              m_show.ReplaceSel(s); 内容来自论文无忧网 www.paper51.com

       }

copyright paper51.com

       cc=cc/bb*(bb-1)+dwn[31]/bb;

内容来自www.paper51.com

       sprintf(s,"第%2d次前位平均值为:\n%10lX\n",bb,cc); 内容来自www.paper51.com

       m_show.ReplaceSel(s); copyright paper51.com

7 系统测试

paper51.com

 第一次多次运行程序,如图:

copyright paper51.com

内容来自论文无忧网 www.paper51.com

图5 第一次测试结果 http://www.paper51.com

第二次多次运行程序,如图: paper51.com

paper51.com

图6 第2次测试结果 copyright paper51.com

第三次多次运行程序,如图: copyright paper51.com

内容来自论文无忧网 www.paper51.com

图7 第3次测试结果 copyright paper51.com

------分隔线----------------------------
联系方式