⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 这个程序是用vc实现的des加密解密算法
💻 CPP
字号:
// 3-Des test
#include "stdafx.h"
#include "des.h"
/*
  Author:黄卫立,李谟仁,肖翠萍
  Date:2007 6月8日  17时
  这个是DES密码体制的调用主程序
  密匙Key从目录下的密匙文件key.dat 读取  
  明文的内容从明文文件plain.dat中读取
  密文的内容存储在本地目录文件下的密文文件cipher.dat
*/

#include "stdio.h"
#include "string.h"
#include "memory.h"
#include "fstream"
using namespace std;
char bufer[1024];   //定义了一个1024个字符组来充当计算过程中的临时变量
char key[64];       //定义了一个接受密匙的字符组
char context[1024]; //定义了一个1024个字符的组来存储明文 和密文的空间
void savefile(const char * s,char c);//用来进行文档的写
int main()
{
	
	memset(key,0,sizeof(key));        //把密匙空间清空并置为0
	
	FILE *openfile;
	int contextCount=0;
	openfile=fopen("key.dat","r");   //打开key文件并获取文件内容
	if(!openfile)
	{
	  printf("文件打开错误!\n");
      return 0;
	}
    int keyCount=fread(key,sizeof(char),64,openfile);//获取文件内容并得到文件的大小
	printf("Key的大小为:%d\nKey的内容为:\n%s\n\n",keyCount,key);
	fclose(openfile);
	openfile=0;
    char chooser;
	int flag=1;
    while(flag)
	{
	memset(bufer, 0, sizeof(bufer));  //把缓存区等清空并置为0
	memset(context,0,sizeof(context));//把内容空间清空并置为0
	printf("请选择下面的操作步骤 E 加密运算  D解密运算 X退出\n");
	scanf("%c",&chooser);
	getchar();  //接受回车符
    switch(chooser)
	{
	case 'E':
	case 'e':
		{
	    openfile=fopen("plain.dat","rb");//打开明文内容
	    if(!openfile)
	    {
	      printf("明文文件打开失败!\n");
	      return 0;
	    }
        contextCount=fread(context,sizeof(char),1024,openfile);//获取明文文件内容并得到实际内容的大小
	    printf("明文的大小为:%d\n明文的内容为:\n%s\n\n",contextCount,context);
        fclose(openfile);
	    openfile=0;
	    strcpy(bufer,context);
 	    Des_Go(bufer,bufer,contextCount,key,keyCount,ENCRYPT);
	    printf("加密后的内容为:\n%s\n\n",bufer);
		 printf("是否保存到文件中(Y,N):");
		 char c;
		 scanf("%c",&c);
		 getchar();  //接受回车符
		 if(c=='y'||c=='Y')
			 savefile(bufer,'E');
		 printf("\n");
		break;
		};
	case 'D':
	case 'd':	
		{
	   
	   openfile=fopen("cipher.dat","rb");//打开明文内容
	   if(!openfile)
	    {
	     printf("密文文件打开失败!\n");
	     return 0;
    	}
         contextCount=fread(context,sizeof(char),1024,openfile);//获取明文文件内容并得到实际内容的大小
	     printf("密文的大小为:%d\n密文的内容为:\n%s\n\n",contextCount,context);
         fclose(openfile);
	     openfile=0;

	     strcpy(bufer,context);
	     Des_Go(bufer,bufer,contextCount,key,keyCount,DECRYPT);
	     printf("解密后的内容为:\n%s\n\n",bufer);
		 printf("是否保存到文件中(Y,N):");
		 char c;
		 scanf("%c",&c);
		 getchar();  //接受回车符
		 if(c=='y'||c=='Y')
			 savefile(bufer,'D');
		 printf("\n");
	     break;
		}
	case 'X':
	case 'x':
		{flag=0;}
	 
	 }
	
	}
    return 1;
}

void savefile(const char* s,char c)
{
  FILE *f;
  if(c=='E')
  {
    f=fopen("cipher.dat","wb");
	if(!f)
	{
	 printf("打开文件失败!\n");
	 return;
	}
    if(fwrite(s,sizeof(char),strlen(s),f)!=strlen(s))
	{
	 printf("写入文件失败!\n");
	}
	 printf("写入文件成功!\n")  ;
  }
  else
  {
	  f=fopen("plain.dat","wb");
	if(!f)
	{
	 printf("打开文件失败!\n");
	 return;
	}
    if(fwrite(s,sizeof(char),strlen(s),f)!=strlen(s))
	{
	 printf("写入文件失败!\n");
	}
	 printf("写入文件成功!\n")  ;
  
  }
  fclose(f);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -