for(j=0;j<4;j++) {
str1[j]=temp%2; temp=temp/2; }
for(j=3;j>=0;j--) {
beforep[k]=str1[j]; k++; } }
9)、转换为二进制的32位比特串进行P置换,生成新的32位比特串,也就是f的值。存放在P[32]中。 for(i=0;i<32;i++)
p[i]=beforep[p_table[i]-1];
至此,第一轮的循环已经完成,成功产生了L[0][32]和R[0][32]。
10)、对于剩下的15轮循环,用一个循环语句进行控制,生成余下的15轮中间数据的左部和右部,最后产生L[15][32]和R[15][32]。
11)、得到的最后一轮左部32位比特串和右部32位比特串进行合并,但是,合并的时候,右部32位比特串在前,R[15][32]在前,而L[15][32]在后。结果存放在beforeoutput[64]中 for(i=0;i<32;i++) //数据合并,R[15][32]在前,L[15][32]在后面 beforeoutput[i]=R[15][i]; for(i=32,j=0;i<64;i++,j++) beforeoutput[i]=L[15][j]; 12)、左右数据合并后的比特串进行最后的逆置换,生成64位的二进制密文。存放在output[64]中。 for(i=0;i<64;i++)
output[i]=beforeoutput[IPR_tabel[i]-1];//得到64位密文 13)、将得到的64位密文转换为8位的ASCII字符。 int charB[8][8]; k=0; char miwen[8]; for(i=0;i<8;i++) for(j=0;j<8;j++) {
charB[i][j]=output[k]; k++;
} for(i=0;i<8;i++) {
str[i]=0;
if(charB[i][0]==1) str[i]=str[i]+128; if(charB[i][1]==1) str[i]=str[i]+64;
6
if(charB[i][2]==1) str[i]=str[i]+32; if(charB[i][3]==1) str[i]=str[i]+16; if(charB[i][4]==1) str[i]=str[i]+8; if(charB[i][5]==1) str[i]=str[i]+4; if(charB[i][6]==1) str[i]=str[i]+2; if(charB[i][7]==1) str[i]=str[i]+1; }
m_outputMiwen=\for(i=0;i<8;i++)
miwen[i]=str[i]; //至此,得到密文miwen[8]
三、标准DES的解密过程
解密与加密的过程几乎完全相同,唯一不同的地方是:在进行E扩展后要与子密钥进行异或的时候,第一轮要与第十六轮子密钥进行异或。依次类推,第十六轮要与第一轮子密钥进行异或。因此对于DES的解密过程就不再细说。
程序运行结果截图
1、初始界面,界面的初始化输入的明文/密文是“20082374”,也就是学号作为待加密数据。
7
2、点击加密:进入加密界面,在这个界面里显示加密过程中的所有细节,包括循环的次数,每轮循环的子密钥、左右部数据。
3、再次点击加密按钮,进行数据的加密,64位的明文经过加密生成64位密文,“64位明文:”是输入的8位明文的二进制表示。“64位密钥:”是输入的8位密钥的二进制表示。“64位密文:”是经过加密之后产生的密文。“循环轮数”是记录十六轮循环的次数。“子密钥”记录每次循环的时候与R(i-1)进行异或的
8
48位子密钥。“左部(Li)”指的是每次循环生成的Li,左部32位比特串。“右部(Ri)”指的是每次循环产生的右部Ri,32位比特串。
4、点击返回按钮,返回主界面。
5、点击解密按钮,进入解密界面,在这个界面里显示了解密过程中的所有细节,包括循环的次数,每轮循环的子密钥、左右部数据。
9
6、点击解密按钮,进行数据的加密,64位的密文经过解密生成64位的明文,“64位密文:”是输入的8位密文的二进制表示。“64位密钥:”是输入的8位密钥的二进制表示。“64位明文:”是经过解密之后产生的明文。“循环轮数”是记录十六轮循环的次数。“子密钥”记录每次循环的时候与R(i-1)进行异或的48位子密钥。“左部(Li)”指的是每次循环生成的Li,左部32位比特串。“右部(Ri)”指的是每次循环产生的右部Ri,32位比特串。
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库DES加密算法课程设计报告(2)在线全文阅读。
相关推荐: