📄 mbtoic.cpp
字号:
// MbtoIC.cpp: implementation of the CMbtoIC class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FingerDemo.h"
#include "Infbuf.h"
#include "Command.h"
#include "part3.h"
#include "reader.h"
#include "MbtoIC.h"
#include "Samfkq_b.h" //extern dll
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern CFingerDemoApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMbtoIC::CMbtoIC()
{
hCom = theApp.g_hCom;
}
CMbtoIC::~CMbtoIC()
{
}
//把指纹模板从IC卡中读入到模板缓冲区
//return value: 0-fail; 1-success
unsigned char CMbtoIC::ReadBinarytoMb (int length,unsigned char byte_mb[])
{
CInfBuf* pCmdInf = new CInfBuf;
// CInfBuf* pTmpInf = new CInfBuf;
CCommand* pCommand = new CCommand;
BYTE *hexvalue = new BYTE[255];
BYTE *resbuf = new BYTE[255];
unsigned char sw1;
unsigned char sw2;
int number;
BYTE res_len; //返回数据域的实际长度,包括SW1,SW2
//卡复位后
//就可以进行读取binary
//把指纹模板读到在byte_mb[]结构中,长度为length
int i=1;
int j=0;
//
//202 bytes finger template
int rl = 0;
while(rl!=length/40){
pCmdInf->ClearBuffer(); // read 100 bytes in 202 bytes
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x00); //head
pCmdInf->AddBufferValue(0xB0);
pCmdInf->AddBufferValue(0x81); //SFI=01 *********************
pCmdInf->AddBufferValue(rl*40); //OFFSET=00
pCmdInf->AddBufferValue(40); //len=100
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command!");
return 0;
}
for(i=0;i<40;i++)
byte_mb[rl*40+i] = resbuf[2+i];
rl++;
} //while loop
if(length%40){
pCmdInf->ClearBuffer(); // read left bytes in 202 bytes
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x00); //head
pCmdInf->AddBufferValue(0xB0);
pCmdInf->AddBufferValue(0x81); //SFI=01 *********************
pCmdInf->AddBufferValue(rl*40); //OFFSET=100
pCmdInf->AddBufferValue(length%40); //len
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command!");
return 0;
}
for(i=0;i<length%40;i++)
byte_mb[rl*40+i] = resbuf[2+i];
} //if structure
return 1;
}
//把指纹模板写入IC卡中
//return value: 0-fail; 1-success
unsigned char CMbtoIC::WriteBinarytoIC (int length,unsigned char byte_mb[])
{
CInfBuf* pCmdInf = new CInfBuf;
// CInfBuf* pTmpInf = new CInfBuf;
CCommand* pCommand = new CCommand;
BYTE *hexvalue = new BYTE[255];
BYTE *resbuf = new BYTE[255];
unsigned char sw1;
unsigned char sw2;
int i; //返回数据域的实际长度,包括SW1,SW2
int number;
BYTE res_len; //返回数据域的实际长度,包括SW1,SW2
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
/*
//delete MF before create MF
pCmdInf->ClearBuffer();
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x00); //command head,CLA
pCmdInf->AddBufferValue(0x77); //INS
pCmdInf->AddBufferValue(0xB8); //P1
pCmdInf->AddBufferValue(0x21); //P2
pCmdInf->AddBufferValue(0x0b); //Lc=30 bytes
pCmdInf->AddBufferValue(0x08); //file type 1
pCmdInf->AddBufferValue(0x08); //file type 1
pCmdInf->AddBufferValue(0x00); //file ID 2 bytes
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00); //file size 2 bytes
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00); //create auth 1
pCmdInf->AddBufferValue(0x00); //delete auth 1
pCmdInf->AddBufferValue(0x00); //select auth 1
pCmdInf->AddBufferValue(0x00); //create auth 1
pCmdInf->AddBufferValue(0x00); //delete auth 1
pCommand->CosCommand(1,pCmdInf);
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command.");
return 0;
}
//command for create MF
pCmdInf->ClearBuffer();
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x80); //command head,CLA
pCmdInf->AddBufferValue(0xe0); //INS
pCmdInf->AddBufferValue(0x00); //P1
pCmdInf->AddBufferValue(0x00); //P2
pCmdInf->AddBufferValue(0x16); //Lc=22 bytes
pCmdInf->AddBufferValue(0x01); //file type 1
pCmdInf->AddBufferValue(0x3f); //file ID 2 bytes
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x06); //file size 1024 + 512 bytes *****************
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x0F); //create auth 1
pCmdInf->AddBufferValue(0x0F); //delete auth 1
pCmdInf->AddBufferValue(0x0F); //select auth 1
pCmdInf->AddBufferValue(0x00); //trans code 8 bytes
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x01); //AID 6 bytes
pCmdInf->AddBufferValue(0x02);
pCmdInf->AddBufferValue(0x03);
pCmdInf->AddBufferValue(0x04);
pCmdInf->AddBufferValue(0x05);
pCmdInf->AddBufferValue(0x06);
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command!");
return 0;
}
//create MF key file(0001)
pCmdInf->ClearBuffer();
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x80); //command head,CLA
pCmdInf->AddBufferValue(0xe0); //INS
pCmdInf->AddBufferValue(0x02); //P1
pCmdInf->AddBufferValue(0x00); //P2
pCmdInf->AddBufferValue(0x07); //Lc=7
pCmdInf->AddBufferValue(0x25); //file type=0x25
pCmdInf->AddBufferValue(0x00); //file ID 2
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x00); //file size 64 bytes
pCmdInf->AddBufferValue(0x40);
pCmdInf->AddBufferValue(0x0F); //read auth 1
pCmdInf->AddBufferValue(0x0F); //write auth 1
pCommand->CosCommand(1,pCmdInf);
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command!");
return 0;
}
//create binary file(00 01) 240 bytes
pCmdInf->ClearBuffer();
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
pCmdInf->AddBufferValue(0x80); //command head
pCmdInf->AddBufferValue(0xe0);
pCmdInf->AddBufferValue(0x02);
pCmdInf->AddBufferValue(0x00);
pCmdInf->AddBufferValue(0x07); //file head 7
pCmdInf->AddBufferValue(0x21); //file type=0x21
pCmdInf->AddBufferValue(0x00); //file ID
pCmdInf->AddBufferValue(0x01); //*********************
pCmdInf->AddBufferValue(0x00); //file size 240 byte**************
pCmdInf->AddBufferValue(0xf0);
pCmdInf->AddBufferValue(0x0f); //read authority
pCmdInf->AddBufferValue(0x0f); //write authority
number = pCmdInf->GetBufferCount();
for(i=0;i<number;i++)
hexvalue[i]=pCmdInf->GetBufferValue(i);
General_B(hCom,1,hexvalue,number,resbuf,&res_len);
sw1 = resbuf[res_len-2];
sw2 = resbuf[res_len-1];
if(sw1!=0x90||sw2!=0)
{
AfxMessageBox("Fail to Execute COS command!");
return 0;
}
*/
//写入指纹模板
//指纹模板在byte_mb[]结构中,长度为length
int j=0;
//写指纹模板数据
int wl = 0;
while(wl!=length/40){
pCmdInf->ClearBuffer();
pCmdInf->AddBufferValue(0x0a); //ISO 14443
pCmdInf->AddBufferValue(0x01);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -