(最新版)密码学实验报告 下载本文

内容发布更新时间 : 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的加解密方法。 二、实验内容