伪随机数发生器实验报告实用技术.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《密码编码学与网络安全》实验报告 题目:实验六 伪随机数发生器 姓名 戴光昱 052433 信息安全 实验环境:Windows XP Sp2 硬件环境:CPU:Intel Core 2 Duo T7100 硬盘:120G 内存:2G 实验要求: 利用ANSI X9.17标准模拟一个伪随机数发生器,内核加密算法调用3DES算法,要求能够按照标准要求产生64位伪随机数和64位种子值。 实验原理: ANSI X9.17伪随机数发生器,能够每次产生一个64位伪随机数和一个64位的新种子。 ANSI X9.17需要的输入为:1.一个64位的当前的时间串值,保证输出字符的随机性。2.一个64位的种子值,用于产生后继的种子值。 ANSI X9.17的种子发生器:每次的新种子产生是通过3DES算法的运算完成的,3DES算法需要的两个密钥位数仍旧是54位。 ANSI X9.17的输出:输出包含一个64位的伪随机数字串和一个64位的种子值。 具体的生成式子如下: Ri=EDE([K1,K2],[Vi+EDE([K1,K2],DTi)]) Vi+1=EDE([K1,K2],[Ri+EDE([K1,K2],DTi)]) 符号说明: ,DTi:64位的随机时间串。 Ri:第i次产生的64位随机数。 Vi:第i次产生的64位种子值。 K1,K2:3DES算法所需的两个密钥。 +:模二加 实验内容及过程: 注意:由于ANSI X9.17应用的算法核心是3DES算法。所以在数据结构定义部分和基本函数定义部分没有变化。具体定义请参考实验二和实验三。 1.数据结构定义部分: DT64:int型一维数组,64位的随机时间串。 V64: int型一维数组,64位的种子值。 sum64:int型一维数组,用于存储模二加的中间结果。 R64:int型一维数组,用于存储64位伪随机数。 bytekey:byte型一维数组,用于存储密钥及其子密钥字节流信息。 IP:int型一维数组,静态,用于存储初始置换矩阵。 IP_1:int型一维数组,静态,用于存储初始置换矩阵的逆矩阵。 PC_1:int型一维数组,静态,用于存储置换选择矩阵1。 PC_2:int型一维数组,静态,用于存储置换选择矩阵2。 E:int型一维数组,静态,用于存储扩充置换矩阵。 P:int型一维数组,静态,用于置换函数矩阵。 S_Box:int型三维数组,静态,用于SBox矩阵设置。 LeftMove:int型一维数组,静态,用于设置左移位置列表。 keydata:int型一维数组,用于存储二进制加密密钥。 encryptdata:int型一维数组,用于存储二进制加密数据。 EncryptCode:byte型一维数组,用于存储加密操作完成后的字节数组。 KeyArray:int型二维数组,用于存储密钥初试化后的二维数组。 2.基本函数用途说明: UnitDes:初始化函数,用于将密钥初始化成字节型数组密钥。 KeyInitialize:用于初始化密钥,生成每一轮的子密钥。 Encrypt:每一轮的加密函数。 ReadDataToBirnaryIntArray:将数据转换为二进制数,存储到数组。 LeftBitMove:循环移位操作函数。 LoopF:落实到每一轮的具体操作函数。 GetEncryptResultOfByteArray:将存储64位二进制数据的数组中的数据转换为八个整数(byte)。 ByteDataFormat:字符串数组拼接函数。 DesEncrypt:具体的加、解密函数,由flag控制工作模式。 3.主要的算法思想: (1).初始化置换函数: for (i = 0; i 64; i++) { M[i] = timeData[IP[i] - 1]; // 明文IP变换 } 此语句将明文字节型数组矩阵进行了明文IP的置换。 (2).每一轮变换的详细过程: 每一轮的扩充,S盒代换,P置换,以及L、R的交换具体由每轮LoopF函数实现: private void LoopF(int[] M, int times, int flag, int[][] keyarray) { int i; int j; int[] L0 = new int[32]; int[] R0 = new int[32]; int[] L1 = new int[32]; int[] R1 = new int[32]; int[] RE = new int[48]; int[][] S = new int[8][6]; int[] sBoxData = new int[8]; int[] sValue

文档评论(0)

taotao0a + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档