内容发布更新时间 : 2024/12/24 4:18:25星期一 下面是文章的全部内容请认真阅读。
for ( i=0 ; i<4 ; i++ ) scanf(\ KeyToBit();
printf(\input the Information encrypted ( End with \\\# \\\输入需要加密的明文,以#作为结束符 for ( i=0 ; i<1000 ; i++ ) {
scanf(\记录输入的明文
tempInfo[i] = Info[i] ; // 将Ascii值同步附给tempInfo if ( Info[i] == '#' ) {
InfoLength = i ;
break ; // 遇到#则停止读取 } }
printf(\*****\\n\\n\
printf(\
for ( i=0,j=0 ; i InfoToBit(i); // 每个明文字符单独转化为8bit位序列,保存到Bit[8] LFSR(); // 加密 Cipher[j] = Out[0] ; printf(\ Cipher[j+1] = Out[1] ; printf(\j = j + 2 ; } printf(\*****\\n\\n\ printf(\ getchar(); // 消除前面输入的字符对本次输入的影响 scanf(\ getchar(); if ( ans == 'n' ) // 按n不继续测试 break ; } } void KeyToBit() { int i,j,r; for ( i=0 ; i<4 ; i++ ) { r = InputKey[i] ; for ( j=0 ; j<8 ; j++ ) Bit[j] = 0 ; // 每个密钥序列初始化为全0,避免上一次转化保存到Bit数组给本次转化的影响。 j = 7 ; while ( r!=0 ) // 十进制转化为二进制的普遍算法 { Bit[j--] = r % 2 ; r = r / 2 ; } for ( j=1 ; j<=8 ; j++ ) // 将本次转化得到的8位序列附给初始化密钥序列InitKey相应的位 InitKey[8*i+j] = Bit[j] ; } } //--- void LFSR() { int p,q,temp; p = 0 ; while ( p < 8 ) { temp = InitKey[31] ^ InitKey[6] ^ InitKey[4] ^ InitKey[2] ^ InitKey[1] ^ InitKey[0] ; // 抽头序列的异或值保存在temp for ( q=31 ; q>0 ; q-- ) // 将InitKey的元素后移,空出第0个的空间 InitKey[q] = InitKey[q-1] ; InitKey[0] = temp ; // InitKey[0] 保存抽头序列的异或值 LFSRKey[p] = InitKey[31] ; // 这个就是每一次要求的LFSR序列,8个保存一次,便于加密 p++; } for ( p=0 ; p<8 ; p++ ) Bit[p] = Bit[p] ^ LFSRKey[p] ; // 当前明文字符的位序列与当前得到的LFSR异或得到加密结果 Output16(); // 得到的8位0、1序列转化为16进制输出 } //--- void Output16() { int i,j,TextInt,OutInt[2]; TextInt = 0 ; OutInt[0] = 0 ; OutInt[1] = 0 ; for ( i=0 ; i<8 ; i++ ) // 先把二进制转化为十进制整数保存在TextInt中 TextInt = TextInt + Bit[i] * (int)pow(2,7-i) ; j = 1 ; while ( 1 ) // 十进制转化为十六进制(整数表示) { OutInt[j] = TextInt % 16 ; TextInt = TextInt / 16 ; j-- ; if ( j < 0 ) break; } for ( i=0 ; i<2 ; i++ ) // 字符表示 { if ( OutInt[i] > 9 ) Out[i] = OutInt[i] - 10 + 'A' ; else Out[i] = OutInt[i] + '0' ; } } //--- void InfoToBit(int j) { int TextInt,i; TextInt = Info[j] ; i = 0 ; for ( i=0 ; i<8 ; i++ ) Bit[i] = 0 ; i = 7 ; while ( TextInt != 0 ) { Bit[i] = TextInt % 2 ; TextInt = TextInt / 2 ; i--; } } 实验三 DES 实验学时:4学时 实验类型:验证 实验要求:必修 一、实验目的 编程实现分组密码DES的加解密方法。 二、实验内容