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

📄 test.dat

📁 演示完整的对称、非对称、摘要算法。 参照提示:其中有屏幕的和弹出提示。用RSA加密字符串前16个字节 用MD5签名加密后的文件,并可用MD5检验文件是否被篡改过
💻 DAT
字号:
#include <stdio.h>
#include <windows.h>

//完成AES和MD5的函数
typedef void (* HASH)(char*,long,char*);
typedef void (* ENC)(char*,long,char*,char*);
typedef void (* DEC)(char*,long,char*,char*);

//完成RSA产生密钥对、加密、解密、签名、解析签名的函数
typedef void (* GENRSAKEY)(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed);
typedef void (* RSAENC)(const unsigned  char *lpBuf,int buflen,const char *PublicKeyFile,unsigned char *lpBufOut,int *outbuflen);
typedef void (* RSADEC)(const unsigned  char *lpBuf,int buflen,const char *PrivateKeyFile,unsigned  char *lpBufOut,int *outbuflen);
typedef void (*RSASIGNFILE)(const char *PrivateKeyFile, const char *messageFilename, const char *signatureFilename);
typedef bool (*RSAVERIFYFILE)(const char *PublicKeyFile, const char *messageFilename, const char *signatureFilename);


HINSTANCE dllhinst1=NULL;
HINSTANCE dllhinst2=NULL;  //RSA
HASH hash=NULL;
ENC enc=NULL;
DEC dec=NULL;
GENRSAKEY genkey=NULL;
RSAENC rsaenc=NULL;
RSADEC rsadec=NULL;
RSASIGNFILE rsasign=NULL;
RSAVERIFYFILE rsaverify=NULL;

BOOL Init()
{
	dllhinst1=LoadLibrary("xsecu");
	dllhinst2=LoadLibrary("pack");
	if (dllhinst1!=NULL &&dllhinst2!=NULL )
	{
		hash=(HASH)GetProcAddress(dllhinst1, "hash");
		enc=(ENC)GetProcAddress(dllhinst1, "enc");
		dec=(DEC)GetProcAddress(dllhinst1, "dec");

		genkey=(GENRSAKEY)GetProcAddress(dllhinst2, "GenerateRSAKey");
		rsaenc=(RSAENC)GetProcAddress(dllhinst2, "RSAPublicEnc");
		rsadec=(RSADEC)GetProcAddress(dllhinst2, "RSAPrivateDec");
		rsasign=(RSASIGNFILE)GetProcAddress(dllhinst2, "RSASignFile");
		rsaverify=(RSAVERIFYFILE)GetProcAddress(dllhinst2, "RSAVerifyFile");


		if (!hash || !enc||!dec || !genkey|| !rsaenc|| !rsadec|| !rsasign|| !rsaverify)
		{
			FreeLibrary(dllhinst1);
			FreeLibrary(dllhinst2);
			return FALSE;
		}
	}
	else
		return FALSE;
	
	return TRUE;
}

void main()
{
	unsigned char lpBuf1[256], lpBuf2[256], lpBuf3[256];
	unsigned char md[17];


	if(!Init())
	{
		printf("Fail to Load DLLs.");
		return;
	}

	for(int i=0;i<256;i++)
	{
		lpBuf1[i]=i%220+36;
		printf("%c:%02X ",lpBuf1[i],lpBuf1[i]);
	}
	printf("\r\n\r\n");
	
	//加密
	printf("加密\r\n");
	enc((char *)lpBuf1,256,"1234567890abcdef",(char *)lpBuf2);
	for(i=0;i<256;i++)
	{
		printf("%c:%02X ",lpBuf2[i],lpBuf2[i]);
	}
	printf("\r\n\r\n");

	//解密
	printf("解密\r\n");
	dec((char *)lpBuf2,256,"1234567890abcdef",(char *)lpBuf3);
	for(i=0;i<256;i++)
	{
		printf("%c:%02X ",lpBuf3[i],lpBuf3[i]);
	}
	printf("\r\n\r\n");


	//比较
	if(memcmp(lpBuf1,lpBuf3,256)==0)
		MessageBox(NULL,"加密解密结果比较成功!","",0);

	//计算摘要
	printf("计算摘要\r\n");
	hash((char *)lpBuf1,256,(char *)md);
	for(i=0;i<16;i++)
	{
		printf("%c:%02X ",md[i],md[i]);
	}
	printf("\r\n\r\n");



	printf("\r\n\r\nRSA算法演示开始\r\n");
	printf("产生密钥对\r\n");

	genkey(1024,"privkey.dat","pubkey.dat","这个串请采用一个随机的串,最好加上时间信息等,造成不能有2个相同的串");
	printf("完成,可以看见文件privkey.dat和pubkey.dat。");
	MessageBox(NULL,"完成,可以看见文件privkey.dat和pubkey.dat。","",0);

	printf("\r\n\r\nRSA加密lpBuf1的前面16字节,注意公钥加密\r\n");
	printf("输出到lpBuf2中,长度在变量OutLeng中.结果请看弹出的对话框\r\n");
	lpBuf1[16]=0x00;
	MessageBox(NULL,(char *)lpBuf1,"RSA加密前的数据",0);
	int OutLeng=0;
	rsaenc(lpBuf1,16,"pubkey.dat",lpBuf2,&OutLeng);
	lpBuf2[OutLeng]=0x00;
	MessageBox(NULL,(char *)lpBuf2,"RSA加密后的数据",0);

	
	printf("\r\n\r\nRSA解密密lpBuf2的前面OutLeng字节,注意私钥加密\r\n");
	printf("输出到lpBuf3中,长度在变量OutLeng中.结果请看弹出的对话框\r\n");
	rsadec(lpBuf2,OutLeng,"privkey.dat",lpBuf3,&OutLeng);
	lpBuf3[OutLeng]=0x00;
	MessageBox(NULL,(char *)lpBuf3,"RSA解密得到的数据",0);

	printf("\r\n\r\n产生一个文件test.dat\r\n");
	CopyFile("secudemo.cpp","test.dat",FALSE);
	printf("签名这个文件,得到签名文件sign.dat\r\n");
	rsasign("privkey.dat","test.dat","sign.dat");

	MessageBox(NULL,"你现在可以试图修改文件test.dat,以便检查签名结果","",0);
	if(rsaverify("pubkey.dat","test.dat","sign.dat")==TRUE)
		MessageBox(NULL,"检查签名结果:文件没有被修改过。","",0);
	else
		MessageBox(NULL,"检查签名失败,可能文件被修改过等。","",0);



}

		

⌨️ 快捷键说明

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