📄 aestext.cpp
字号:
#include <stdio.h>
#include <windows.h>
#include <iostream.h>
#include <string.h>
typedef void (* ENC)(char*,long,char*,char*);
typedef void (* DEC)(char*,long,char*,char*);
typedef void (* HASH)(char*,long,char*);
//声明实例并指向空
HINSTANCE dllhinst=NULL;
ENC encAES=NULL;
DEC decAES=NULL;
HASH hash=NULL;
BOOL Init()
{
dllhinst=LoadLibrary("xsecu");//将动态库xsecu映射到dllhinst
if (dllhinst!=NULL) //判断动态库xsecu是否为空
{
encAES=(ENC)GetProcAddress(dllhinst, "enc");//将库中函数enc映射到enc
decAES=(DEC)GetProcAddress(dllhinst, "dec");//将库中函数dec映射到dec
hash=(HASH)GetProcAddress(dllhinst, "hash");//将库中函数hash映射到hash
if (!encAES||!decAES||!hash) //失败的话释放dllhinst
{
FreeLibrary(dllhinst);
return FALSE;
}
}
else
return FALSE;
return TRUE;
}
void main()
{
char *buffer3 = new char [100];//用于存AES加密解密密钥
memset(buffer3, 0, 100);
if(!Init())
{
printf("Fail to Load DLLs.");
return;
}
char n;
cout<<"********这是一个AES加密解密、MD5摘要算法软件(加密密钥可以即时输入)*********"<<endl<<endl;//界面提示
cout<<"********版权所有: 张妤芝 *********"<<endl<<endl;
cout<<" 1 AES 加密! "<<endl;
cout<<" 2 AES 解密! "<<endl;
cout<<" 3 计算文件MD5! "<<endl;
cout<<" 4 退出! "<<endl;
cin>>n;
while(n!='4' && n!='3' && n!='2' && n!='1')
{
cout<<" 你选择有错误,请重新选择 "<<endl<<endl;
cout<<" 1 AES 加密!"<<endl;
cout<<" 2 AES 解密!"<<endl;
cout<<" 3 计算文件MD5!"<<endl;
cout<<" 4 退出!"<<endl;
cin>>n;
}
FILE *fpread; //所读文件指针
FILE *fpwrite; //要写入的文件指针
char path[500]; //放置文件路径
memset(path, 0, 500);
while(n!='4')
{
if ( n == '1')//AES加密
{
cout<<"请输入加密文件路径:"<<endl;
cin>>path;
while((fpread=fopen(path,"rb"))==NULL)
{
cout<<"加密文件打开失败,请检查文件名称或路径是否有错误!"<<endl;
cout<<"请重新输入:"<<endl;
cin>>path;
}
fseek(fpread, 0, 2);//将文件指针定位到文件末尾
long len = ftell(fpread)+(16-ftell(fpread)%16);//计算文件长度,不足16字节的部分补足
rewind(fpread);
char *buffer1 = new char [len];//定义二个字符串
char *buffer2 = new char [len];
memset(buffer1, 0, len);//清空字符串
memset(buffer2, 0, len);
if (!buffer1) //查看空间是否分配成功
{
MessageBox(NULL,"Allocating fail","",0);
}
else
{
try
{
fread(buffer1,1,len,fpread);
}
catch(char *e)
{
cout<<e<<"读取文件打开失败"<<endl;
fclose(fpread);
delete buffer1;
}
cout<<" 输入AES加密密钥: "<<endl;
cin>>buffer3; //输入AES加密密钥
encAES((char *)buffer1,len,buffer3,(char *)buffer2);
}
delete buffer1;
fclose(fpread);
cout<<"加密成功!"<<endl;
fpwrite=fopen("encAESfile.txt","wb+");
fwrite(buffer2,1,len,fpwrite); //将加密后的内容写入到文件
cout<<"加密文件已经保存到同一目录下的 encAESfile.txt"<<endl;
cout<<" 1 AES 加密! "<<endl;
cout<<" 2 AES 解密! "<<endl;
cout<<" 3 计算文件MD5!"<<endl;
cout<<" 4 退出! "<<endl;
cin>>n;
delete buffer2;
fclose(fpwrite);
}
else if (n=='2') //AES解密
{
cout<<"请输入解密文件路径:"<<endl;
cin>>path;
while((fpread=fopen(path,"rb"))==NULL)
{
cout<<"解密文件打开失败,请检查文件名称或路径是否有错误!"<<endl;
cout<<"请重新输入:"<<endl;
cin>>path;
}
fseek(fpread, 0, 2);
long length = ftell(fpread);//计算文件长度
rewind(fpread);
char *temp1 = new char [length];
char *temp2 = new char [length];
memset(temp1, 0, length);
memset(temp2, 0, length);
if (!temp1)
{
MessageBox(NULL,"Allocating fail","",0);
}
else
{
try
{
fread(temp1,1,length,fpread);//将文件中的内容读入一个临时数组
}
catch(char *e) //捕获异常
{
cout<<e<<" 读取文件打开失败 "<<endl;
fclose(fpread);
delete temp1;
}
decAES((char *)temp1,length,(char*)buffer3,(char *)temp2);//加密和解密使用相同的密钥
}
delete temp1;
fclose(fpread);
cout<<" 解密文件成功 "<<endl;
fpwrite=fopen("decAesfile.txt","wb+");
fwrite(temp2,1,length,fpwrite);
delete temp2;
fclose(fpwrite);
cout<<" 解密文件已经保存到同一目录下的decAesfile.txt"<<endl;
cout<<" 1 AES 加密! "<<endl;
cout<<" 2 AES 解密! "<<endl;
cout<<" 3 计算文件MD5!"<<endl;
cout<<" 4 退出! "<<endl;
cin>>n;
}
if(n=='3')//计算文件摘要MD5
{
cout<<" 计算摘要 : "<<endl;
cout<<" 请输入要计算摘要的文件路径:"<<endl;
cin>>path;
while((fpread=fopen(path,"rb"))==NULL)
{
cout<<"文件打开失败,请检查文件名称或路径是否有错误!"<<endl;
cout<<"请重新输入:"<<endl;
cin>>path;
}
fseek(fpread, 0, 2);
long length = ftell(fpread);
rewind(fpread);
char *temp1 = new char [length];
char *temp2 = new char [length];
memset(temp1, 0, length);
memset(temp2, 0, length);
if (!temp1)
{
MessageBox(NULL,"Allocating fail","",0);
}
else
{
try
{
fread(temp1,1,length,fpread);//将文件中的内容读入一个临时数组
}
catch(char *e) //捕获异常
{
cout<<e<<"读取文件打开失败"<<endl;
fclose(fpread);
delete temp1;
}
hash((char *)temp1,length,(char *)temp2);// 计算文件摘要
}
delete temp1;
fclose(fpread);
cout<<" 文件摘要计算成功!"<<endl;
fpwrite=fopen("MD5.txt","wb+");
fwrite(temp2,1,length,fpwrite);
delete temp2;
fclose(fpwrite);
cout<<" 摘要文件已经保存到同一目录下的MD5.txt"<<endl;
cout<<" 1 AES 加密! "<<endl;
cout<<" 2 AES 解密! "<<endl;
cout<<" 3 计算文件MD5!"<<endl;
cout<<" 4 退出! "<<endl;
cin>>n;
}
if (n=='4')//退出
{
exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -