?? demodata.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 + -