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

📄 demodata.cpp

📁 这是一个加解密程序
💻 CPP
字号:

#include "stdafx.h"

#include "DemoData.h"

#include "ZCRC.h"

//////////////////////////////////////////////////////////////////////
// CDemoData 类的成员
//////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------
// CDemoData 类的构造方法和析构方法

CDemoData::CDemoData(CCryptorTool1 *pCT)
{
	pCryptTool = pCT;
}

CDemoData::~CDemoData()
{
}

//-------------------------------------------------------------------
// CDemoData 类的公共方法

void CDemoData::SetCryptorTool(CCryptorTool1 *pCT)
{
	pCryptTool = pCT;
}

//共128字节
void CDemoData::ToBuffer(unsigned char *Buffer)
{
	unsigned char B[128];
	unsigned char *p=B;
	unsigned long l;

	memset(B,0,128);

	memcpy(p,Name,   12);  p += 12;
	memcpy(p,&Code,   4);  p +=  4;
	memcpy(p,IDCard, 20);  p += 20;
	memcpy(p,Address,64);  p += 64;
	
	l = CZCRC::CRC32(B,120);
	memcpy(B+120,&l,4);

	pCryptTool->Encrypt(Buffer,B,128);
}

//共128字节
int  CDemoData::FromBuffer(unsigned char *Buffer)
{
	unsigned char B[128];
	unsigned char *p=B;
	unsigned long l0,l;

	pCryptTool->Decrypt(B,Buffer,128);

	memcpy(&l0,B+120,4);
	l = CZCRC::CRC32(B,120);
	if (l!=l0) return 0;  //校验失败
	
	memcpy(Name,   p,12);  p += 12;
	memcpy(&Code,  p, 4);  p +=  4;
	memcpy(IDCard, p,20);  p += 20;
	memcpy(Address,p,64);  p += 64;

	return 1;
}

void CDemoData::ToFile(const char *FileName)
{

	int i;
	unsigned char B[128];
	FILE *fp;
		
	ToBuffer(B);

	fp = fopen(FileName,"wt");

	for (i=0;i<128;i++) {
		if ((i%16)==0) fprintf(fp,"\n");
		fprintf(fp," %02X",B[i]);
	}
	fprintf(fp,"\n");
	fclose(fp);
}

int  CDemoData::FromFile(const char *FileName)
{
	int i,j,k;
	char s[16];
	unsigned char B[128];
	FILE *fp;
	
	fp = fopen(FileName,"rt");
	
	memset(B,0,128);
	i=0; j=0;
	while (!feof(fp)) {
		k = fgetc(fp);
		if ((k==' ')||(k=='\t')||(k=='\n')) {
			if (j>0) {
				s[j]=0;
				B[i++]=HexToInt(s);
				j=0;
			}
			continue;
		}
		s[j++]=k;
	}
	fclose(fp);

	k=FromBuffer(B);

	return k;
}

//-------------------------------------------------------------------

//十六进制字符串转化为整数(只转化两位)
int CDemoData::HexToInt(const char *s)
{
	int m0,m1;
	m0 = toupper(s[0]) & 0xFF;
	m1 = toupper(s[1]) & 0xFF;
	if (m0>'9') m0 -= ('A'-'9'-1);
	if (m1>'9') m1 -= ('A'-'9'-1);
	m0 -= '0';
	m1 -= '0';
	return ( (m0<<4) + m1 );
}

//-------------------------------------------------------------------

⌨️ 快捷键说明

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