📄 encrypt-decrypt 01.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 + -