• 大小: 164KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: C/C++
  • 标签: des  拓展  

资源简介

此程序采用vc++6.0实现,实现字符串des加密,增加64位-128位的拓展。欢迎下载,禁止交流!

资源截图

代码片段和文件信息

/********DES Encript by mzt********************************************/

#include
#include
#include“des_encode.h“
#include “time.h“
#include 
int key[16][48];
int keyExtend[16][48];
char str[8];

void main()                 //main function
{
  int d;
Cm: printf(“1.【数据加解密】2.【退出】\n“);
scanf(“%d“&d);
getchar();
    if (d==2)
    {
exit(0);
    }
if(d==1)
{ EncodeMain();    goto Cm;}
else   printf(“\n【输入错误!请重新选择】:\n“);goto   Cm;

}


void EncodeMain()           //EncodeMain function
{
    int iNum;
    clock_t ab;
    char keychar[8]keycharExtend[8];
    int key2[8]keyExtend[8];
    int strkey[8];
  

    printf(“\n【请输入8个要加密的字符】:\n“);
  
Xm: gets(str);
    Num=strlen(str);

    if (Num<8)
{
   for (i=Num;i<8;i++)
   {
   str[i]=‘\0‘;
   }

   }
   if (Num>8)
   {
   printf(“【字符数过长!!请重新输入】:\n“);
   goto Xm;
   }
  
  for(i=0;i<8;i++)
    strkey[i]=str[i];


  
 printf(“\n【请输入密钥(8个字符)】:\n“);
Ym:  gets(keychar);
 Num=strlen(keychar);
 
     if (Num!=8)
 {
  printf(“【字符数不正确!!请重新输入】:\n“);
  goto Ym;
 }
    for(i=0;i<8;i++)
     key2[i]=keychar[i];
  
     printf(“\n【请输入拓展密钥(8个字符)】:\n“);
Zm:  gets(keycharExtend);
 Num=strlen(keycharExtend);
 
     if (Num!=8)
 {
 printf(“【字符数不正确!!请重新输入】:\n“);
 goto Zm;
 }
  for(i=0;i<8;i++)
  keyExtend[i]=keycharExtend[i];

  a=clock();
  Encode(strkeykey2keyExtend);
  b=clock();
  printf(“\n\n\n【加密时间为】:%dms\n“b-a);
  printf(“\n【加密后十六进制密文是】:\n“);
  for(i=0;i<8;i++)
     printf(“%4x“strkey[i]);
  

  printf(“\n\n【请输入解密密码】:\n“);
Am:  gets(keychar);
 Num=strlen(keychar);
 
     if (Num!=8)
 {
 printf(“【密码长度错误!!请重新输入】:\n“);
 goto Am;
 }
  for(i=0;i<8;i++)
     key2[i]=keychar[i];
  
   printf(“【请输入拓展密码】:\n“);
Bm:  gets(keycharExtend);
 Num=strlen(keycharExtend);
 
     if (Num!=8)
 {
 printf(“【密码长度错误!!请重新输入】:\n“);
 goto Bm;
 }
  for(i=0;i<8;i++) keyExtend[i]=keycharExtend[i];


   a=clock();
   Decode(strkeykey2keyExtend);
   b=clock();

 printf(“\n\n\n【解密的时间为】:%d“b-a);
  
//   for(i=0;i<8;i++)
//     printf(“%4x“strkey[i]);
  
  
  for(i=0;i<8;i++)
    str[i]=strkey[i];
 
  
  printf(“\n【明文为】:“);
     for(i=0;i<8;i++) printf(“%c“str[i]);
 printf(“\n“);


}

//ls/rs循环左移
void keyBuild(int *keychar){            //create key array
    int i;
    int movebit[]={1122222212222221};
    int midkey2[56];
    int midkey[64];
    StrtoBin(midkeykeychar);//应该在此处添加midkey3
    for(i=0;i<56;i++)
      midkey2[i]=midkey[PC1[i]-1];
    for(i=0;i<16;i++)
      keyCreate(midkey2movebit[i]i);
}

//keychar和产生的midkey的赋值
void StrtoBin(int *midkeyint *keychar){     //change into binary
    int trans[8]ijkn;
    n=0;
    for(i=0;i<8;i++)
{
        j=0;
        while(keychar[i]!=0){
            trans[j]=keychar[i]%2;
            keychar[i]=keychar[i]/2;
            j++;
      

评论

共有 条评论