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

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

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

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, 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,

21

32,27,3,9, 19,13,30,6, 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[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];

22

} k=0;

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_Miwen=\

23

for(i=0;i<64;i++) //将64位二进制密文输出到界面上 {

m_Miwen=m_Miwen+(char)(48+output[i]); if((i+1)%8==0)

m_Miwen=m_Miwen+\ }

/*将output[64]二进制密文转换成ASCII字符*/ int charB[8][8]; k=0;

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

charB[i][j]=output[k]; k++; }

char miwen[8]; 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; 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] miwen[i]='\\0';

m_outputMiwen=miwen;

CString temp1,temp2,temp3; char *ch1,*ch2,*ch3; for(i=0;i<16;i++)

24

{

int m=m_output.InsertItem(0,\ char

chtempL[40]=\ int ctempL[32],ctempkey[48],ctempR[32]; for(j=0;j<32;j++) {

ctempL[j]=L[i][j]; ctempR[j]=R[i][j]; }

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

ctempkey[j]=keys[i][j]; for(j=0;j<32;j++) {

temp1.Format(\

ch1=temp1.GetBuffer(temp1.GetLength()); strcat(chtempL,ch1); if((j+1)%8==0)

strcat(chtempL,\

temp2.Format(\

ch2=temp2.GetBuffer(temp2.GetLength()); strcat(chtempR,ch2); if((j+1)%8==0)

strcat(chtempR,\ }

for(j=0;j<48;j++) {

temp3.Format(\

ch3=temp3.GetBuffer(temp3.GetLength()); strcat(chtempkey,ch3); if((j+1)%8==0)

strcat(chtempkey,\ }

_itoa(i+1,number,10);

m_output.SetItemText(m,0,number); m_output.SetItemText(m,1,chtempkey); m_output.SetItemText(m,2,chtempL); m_output.SetItemText(m,3,chtempR); }

UpdateData(false); }

25

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

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