DES译码程序的MFC实现

来源:互联网 发布:软件可行性报告如何写 编辑:程序博客网 时间:2024/05/20 21:18

         一直打算把这个部分分享出来,但是最近比较忙,所以总是会忘记,闲话不多说,说说具体内容。

         对话框有三个部分组成,分别是用于输入十六进制密文的输入框,译码按钮和进行偶校验与输出框

对于des的加解密程序,在上一章节已经给出,这里就不多加阐述了,当得到输入的十六进制密文后,首

先将其译成二进制数据,然后再对其进行译码,输出。

void CDES_appDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码   UpdateData(true);   unsigned char x;   char MingW64bit[64];   char Key64bit[64],Key8Byte[8]={'0','1','2','3','4','5','6','7'};   char Key16[16][48],temp2[64];   char Mybuff[10];   char c[32],ouj[8],jiou[]="奇偶校验:";   char total[100]="输入有误。";   int i=0,j,w,k; //对密钥进行替换   Char8ToBit64(Key8Byte,Key64bit);  //密钥字符串置换成二进制串    for(x=0;x<8;x++)  //补偿足8位奇偶校验位   {   memcpy(temp2+8*x,Key64bit+7*x,7);   temp2[x*8+7]=1;   }   memcpy(Key64bit,temp2,64);   Key16Itera(Key64bit,Key16);//生成子密钥       /*************************************************************************************************解密部分*****************************************************************************************************************/for(i=0;m_input[i]!='\0';i++){          c[i]=m_input[i];}//去除空格for(i=0;i<32;i++){if(c[i]==' '){for(j=i;j<32;j++){   c[j]=c[j+1];}i--;}}i=0;while(i<16){  if(c[i]>='0'&&c[i]<='9')   c[i]=c[i++]-48;  else if(c[i]>='A'&&c[i]<='F')    c[i]=c[i++]-55;   else if(c[i]>='a'&&c[i]<='f')   c[i]=c[i++]-87;  else   {    goto end; }} w=k=i=0; while(i<16){  for(j=3;j>=0;j--)  {     MingW64bit[i*4+j]=c[i]%2;c[i]/=2;  if(MingW64bit[i*4+j]==1) w++;}   i++;}  //校验位i=16;while(i<18){  for(j=3;j>=0;j--)  {      ouj[(i-16)*4+j]=c[i]%2;c[i]/=2;  if(ouj[(i-16)*4+j]==1) k++;}   i++;}    Decryp(MingW64bit,Key16);//解密函数,输入密文MingW64bit,和密钥Key16。   Bit64ToChar8(MingW64bit,Mybuff); //把明文的二进制串转换成字符串   for(i=0;i<10;i++)  total[i]=jiou[i];   if(k>=4){  if(w%2!=0)  { char joresult[7]="true;\n";   for(i=10;i<16;i++)  total[i]=joresult[i-10];}  else{     char joresult[7]="false\n";   for(i=10;i<16;i++)  total[i]=joresult[i-10];  }}else{  if(w%2==0)  {char joresult[7]="true;\n";  for(i=10;i<16;i++)  total[i]=joresult[i-10];}  else{     char joresult[7]="false\n";   for(i=10;i<16;i++)  total[i]=joresult[i-10];  }  }    char mw[]="明文:";   for(i=16;i<22;i++)  total[i]=mw[i-16];   for(i=22;i<30;i++)  total[i]=Mybuff[i-22];   total[30]='.';   total[31]='\0';  //  IDC_EDIT1=Mybuff[0];  // }end :   m_output=total;UpdateData(false);}
版权所有,如需转载请标明出处,谢谢

0 0
原创粉丝点击