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

📄 aestext.cpp

📁 AES和MD5加密解密程序
💻 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 + -