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

📄 encrypt-decrypt 01.cpp

📁 加密解密的源代码
💻 CPP
字号:
/*
* Copyright (c) 2004 asile_zxj 华中科技大学电信系
* All rights reserved.
* 
* 文件名称:Encrypt-Dncrypt 01.cpp
* 文件标识:无
* 摘    要:用des算法实现对磁盘文件的加密解密
* 
* 当前版本:1.0
* 作    者:张新军
* 完成日期:2005年1月2日
*
* 取代版本:无
* 原作者  :无
* 完成日期:无
*/

#include "des.h"
#include "iostream.h"
#include "time.h"
#include "stdafx.h"

unsigned char password[8];                         //定义存放密码的数组
unsigned char infilename[20], outfilename[20];     //输入文件名、输出文件名
FILE *infile;                                      //存放打开输入文件返回指针
FILE *outfile;                                     //存放打开输出文件返回指针
unsigned int key[32];                              //存放经DES算法转换后的32位密钥
time_t Start_Time, End_Time;


void InputInFilename(unsigned char inname[20]);    //保存输入文件名
void InputOutFilename(unsigned char outname[20]);  //保存输出文件名
void InputPassword();                              //输入密码函数:输入8位密码
void Encode();                                     //加密函数
void Decode();                                     //解密函数


//此函数提示用户输入打开的文件名,并存储到infilename[]里面,需参数 指向输入文件名的数组指针
void InputInFilename(unsigned char *inname)     
{
	cout<<"Please input the fileName for read:"<<endl;
	scanf("%s", infilename);
}


//提示用户输入需保存文件的文件名,存入outfilename[]里面,需参数 指向输出文件名的数组指针
void InputOutFilename(unsigned char outname[20])
{
	cout<<"Please input the fileName for Write:"<<endl;
	scanf("%s", outfilename);
}

//提示用户输入密码,存入password[],并回显'*'
void InputPassword()
{
	int i;

	cout<<"Please input password(no more than 8 letters): "<<endl;
	
	for (i=0; (i<8) && ((password[i] = getch()) != 13); i++)  //保证密码位数不大于8位,回车结束
	{
		printf("%c", '*');
	}
	printf("\n");

	flushall();
}


//加密文件函数
void Encode()
{

	unsigned int ibuf[2], obuf[2];        //定义缓冲区

	if ((infile = fopen((const char *)infilename, "rb")) == NULL) //打开输入文件
	{
		printf("cannot open the infile ! \n");                    //出错提示
		return ;
	}

	if ((outfile = fopen((const char *)outfilename, "wb")) == NULL) //打开输出文件
	{
		printf("cannot open the outfile ! \n");                    //出错提示
		return ;
	}

	des_ky(password, key);                     //由DES算法产生加密用的子密钥

	cout<<"Encrypt Start! "<<endl;             //获得加密开始时间
	time(&Start_Time);
	cout<<"Start Time: "<<ctime(&Start_Time);

	while (!feof(infile))                      //读取文件加密直到文件尾
	{
		fread(ibuf, 1, 8, infile);             //读文件
		des_ec(ibuf, obuf, key);               //调用des_ec函数进行DES加密
		fwrite(obuf, 8, 1, outfile);           //加密结果存入输出文件
	}

	cout<<"Decrypt End!"<<endl;                //获得加密结束时间
	time(&End_Time);
	cout<<"End Time:"<<ctime(&End_Time)<<"RunTime:"<<long(End_Time-Start_Time)<<endl;
	printf("%.3lf Mbyte/s\n\n",(float)filelength(infile->_file)/float(End_Time-Start_Time)/1000000.0);

	fclose(infile);      //关闭文件
	fclose(outfile);
}


//解密文件函数
void Decode()
{

	unsigned int ibuf[2], obuf[2];
	 
	if ((infile = fopen((const char *)infilename, "rb")) == NULL)
	{
		printf("cannot open the infile ! \n");
		return ;
	}

	if ((outfile = fopen((const char *)outfilename, "wb")) == NULL)
	{
		printf("cannot open the outfile ! \n");
		return ;
	}

	des_ky(password, key);


	cout<<"Decrypt Start!"<<endl;
	time(&Start_Time);
	cout<<"Start Time:"<<ctime(&Start_Time);

	while (!feof(infile))
	{
		fread(ibuf, 1, 8, infile);
		des_dc(ibuf, obuf, key);                     //调用des_dc函数进行DES解密
		fwrite(obuf, 8, 1, outfile);                 //解密结果存入输出文件
	}

	cout<<"Decrypt End!"<<endl;
	time(&End_Time);
	cout<<"End Time:"<<ctime(&End_Time)<<"RunTime:"<<long(End_Time-Start_Time)<<endl;
	printf("%.3lf Mbyte/s\n\n",(float)filelength(infile->_file)/float(End_Time-Start_Time)/1000000.0);

	fclose(infile);
	fclose(outfile);
}


//主函数
main()
{
	cout<<"Encrypt a File or Decrypt a File Use DES."<<endl<<endl;  //提示信息

	char c;
	
	do
	{
		cout<<"Please choose: \n\nE to Encrypt, \nD to Dncrypt, \n\nQ to exit:"<<endl<<endl;  //提示信息
    
		c = getche();          //接收选择项
		cout<<endl;


		switch(c)                  //选择操作项
		{
		case 'e':                  //输入'e',执行加密
					InputInFilename(infilename);
					InputOutFilename(outfilename);
					InputPassword();
					Encode();
					break;
		case 'E':                  //输入'E',执行加密
					InputInFilename(infilename);
					InputOutFilename(outfilename);
					InputPassword();
					Encode();
					break;
		case 'd':                  //输入'e',执行解密
					InputInFilename(infilename);
					InputOutFilename(outfilename);
					InputPassword();
					Decode();
					break;
		case 'D':                  //输入'D',执行解密
					InputInFilename(infilename);
					InputOutFilename(outfilename);
					InputPassword();
					Decode();
					break;
		default:
					break;
		}
	}
	while((c != 'q') && (c != 'Q') && (c != 27));   //当输入q时结束

	return 0;
}

⌨️ 快捷键说明

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