伪随机数发生器程序说明文档0.docVIP

  • 3
  • 0
  • 约5.43千字
  • 约 8页
  • 2018-12-07 发布于江苏
  • 举报
伪随机数发生器程序说明文档0

伪随机数发生器程序说明文档 ——《密码编码学与网络安全》实验六 一、基本变量、数据结构、函数说明: 注意:基本变量、数据结构、函数说明和实验二DES算法是一样的。没有任何变化。 1.基本变量定义部分: flag:boolean型变量,用于标识是解密还是加密过程。 2.数据结构定义部分: 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型二维数组,用于存储密钥初试化后的二维数组。 3.基本函数定义: UnitDes:初始化函数,用于将密钥初始化成字节型数组密钥。 KeyInitialize:用于初始化密钥,生成每一轮的子密钥。 Encrypt:每一轮的加密函数。 ReadDataToBirnaryIntArray:将数据转换为二进制数,存储到数组。 LeftBitMove:循环移位操作函数。 LoopF:落实到每一轮的具体操作函数。 GetEncryptResultOfByteArray:将存储64位二进制数据的数组中的数据转换为八个整数(byte)。 ByteDataFormat:字符串数组拼接函数。 DesEncrypt:具体的加、解密函数,由flag控制工作模式。 二、输入输出说明: 本程序是需要输入进行驱动的。具体输入项为四项: a. 8位整数初始化种子值; b. 希望产生的随机数个数; c. 8位整数密钥K1。 d. 8位整数密钥K2。 通过将日期和种子作为X9.17伪随机数算法的输入,经过3DES算法,具体输出为: a. 64位随机数0-1串; b. 64位新种子0-1串。 三、算法简略流程说明: (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 = new int[32]; int[] RP = new int[32]; for (i = 0; i 32; i++) { L0[i] = M[i]; // 明文左侧的初始化 R0[i] = M[i + 32]; // 明文右侧的初始化 } for (i = 0; i 48; i++) { RE[i] = R0[E[i] - 1]; // 经过E变换扩充,由32位变为48位 RE[i] = RE[i] + keyarray[times][i]; // 与KeyArray[times][i]按位作不进位加法运算 if (RE[i] == 2) { RE[i] = 0; } } for (i = 0; i 8; i++) { // 48位分成8组 for (j = 0

文档评论(0)

1亿VIP精品文档

相关文档