77范文网 - 专业文章范例文档资料分享平台

DES加密算法课程设计报告(7)

来源:网络收集 时间:2019-01-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

beforekey[i][j]=C[i][j]; for(k=0;k<28;k++,j++)

beforekey[i][j]=D[i][k]; }

/*beforekey[16][56]经过pc_2置换,生成16轮子密钥key[16][48]*/ int keys[16][48]; for(i=0;i<16;i++) for(j=0;j<48;j++)

keys[i][j]=beforekey[i][pc_2table[j]-1]; /*初始置换IP*/

int IP_table[64]={

58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7}; int afterIP[64]; for(i=0;i<64;i++) {

afterIP[i]=miwenB[IP_table[i]-1]; }

/*明文的第零次分组,L0[32],R0[32]*/ int L0[32],R0[32]; for(i=0;i<32;i++) L0[i]=afterIP[i];

for(j=0,i=32;i<64;i++,j++) R0[j]=afterIP[i];

/*十六轮循环生成密文,首先是L[16][32]和R[16][32]的生成*/ int L[16][32],R[16][32]; int E_table[48]={

32,1,2,3,4,5, 4,5,6,7,8,9,

8,9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,31}; int afterER0[48],beforeS[48]; for(i=0;i<32;i++) //Li=R(i-1) L[0][i]=R0[i];

31

for(i=0;i<48;i++) //E置换,生成48位数据,与第十五轮子密钥进行异或,为进入S盒做准备

afterER0[i]=R0[E_table[i]-1]; for(i=0;i<48;i++)

if(afterER0[i]==keys[15][i]) beforeS[i]=0; else

beforeS[i]=1;

/*将beforeS[48]分在8个数组中,为经过8个S盒准备*/ int beforeSBox[8][6]; k=0;

for(i=0;i<8;i++) for(j=0;j<6;j++) {

beforeSBox[i][j]=beforeS[k]; k++; }

/* S盒变换,48位数据生成32位数据*/ int afterSBox[8];

int SBox[8][4][16]={ //S盒变换表 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,

32

4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}; int hang,lie; for(i=0;i<8;i++) {

hang=beforeSBox[i][0]*2+beforeSBox[i][5];

lie=beforeSBox[i][1]*8+beforeSBox[i][2]*4+beforeSBox[i][3]*2+beforeSBox[i][4];

afterSBox[i]=SBox[i][hang][lie]; }

/*将从S盒中出来的8个十进制数字转换成32位的二进制数*/ int beforep[32]; k=0;

int temp; int str1[4]; for(i=0;i<8;i++) {

temp=afterSBox[i]; for(j=0;j<4;j++) {

str1[j]=temp%2; temp=temp/2; }

for(j=3;j>=0;j--) {

beforep[k]=str1[j]; k++; } }

/*从S盒输入的32位的二进制数进行P置换,生成的即是f函数的结果*/ int p_table[32]={

16,7,20,21, 29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14, 32,27,3,9, 19,13,30,6,

33

22,11,4,25}; int p[32];

for(i=0;i<32;i++)

p[i]=beforep[p_table[i]-1];

/*p[32]与L0[32]进行异或,得到R[0][32]*/ for(i=0;i<32;i++) {

R[0][i]=p[i]+L0[i]; if(R[0][i]==2) R[0][i]=0; }

/*已经生成L[0][32]和R[0][32],下面进行十五轮循环,生成其余L[i][32]和R[i][32]*/

int afterER[16][48]; int n;

for(i=1;i<16;i++) {

for(j=0;j<32;j++)

L[i][j]=R[i-1][j]; for(j=0;j<48;j++) //E置换

afterER[i][j]=R[i-1][E_table[j]-1]; for(j=0;j<48;j++) //与子密钥进行异或 {

if(afterER[i][j]==keys[15-i][j]) beforeS[j]=0; else

beforeS[j]=1; } k=0;

for(j=0;j<8;j++) //生成进入S盒钱的8个数组,分别进入8个S盒 for(n=0;n<6;n++) {

beforeSBox[j][n]=beforeS[k]; k++; }

for(j=0;j<8;j++) //进入S盒,从8个S盒中生成8个数 {

hang=beforeSBox[j][0]*2+beforeSBox[j][5];

lie=beforeSBox[j][1]*8+beforeSBox[j][2]*4+beforeSBox[j][3]*2+beforeSBox[j][4];

afterSBox[j]=SBox[j][hang][lie]; } k=0;

34

for(j=0;j<8;j++) //S盒出来的8个十进制数转换成32位的二进制数 {

temp=afterSBox[j]; for(n=0;n<4;n++) {

str1[n]=temp%2; temp=temp/2; }

for(n=3;n>=0;n--) {

beforep[k]=str1[n]; k++; } }

for(j=0;j<32;j++)

p[j]=beforep[p_table[j]-1]; for(j=0;j<32;j++)

if(p[j]==L[i-1][j]) R[i][j]=0; else

R[i][j]=1; }

/*通过十五轮循环,最后得到L[15][32]和R[15][32],合并之后进行IP逆置换生成明文*/

int beforeoutput[64]; int output[64]; int IPR_tabel[64]={

40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25}; 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]; for(i=0;i<64;i++)

output[i]=beforeoutput[IPR_tabel[i]-1];//得到64位明文 m_Mingwen=\ for(i=0;i<64;i++) {

35

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库DES加密算法课程设计报告(7)在线全文阅读。

DES加密算法课程设计报告(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/405766.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: