uint8_t read_tag( tagBufferType *tag)
|
|
uint8_t tag_read_data( tagBufferType *tag)
|
|
uint8_t tag_read_15693_data( tagBufferType *tag )
|
|
|
log_arry(DEBUG,"Read data:" ,tag->buffer , 110);//之前长什么样子
Decryptionr(tag->buffer,tag->UID,tag->buffer);//解密函数
log_arry(DEBUG,"Decryptionr data:" ,tag->buffer , 110 );//之后长什么样子
CARD ID: : [59 26 17 0A 8F 21 02 E0 ]
解密之前:
F6 56 21 33 9E 25 29 D3 10 09 F1 87 F5 1F 2F 23 75 D9 A2 E2 3E 38 F8 FE 09 0B 9C 30 61 01 32 95 94 11 0D E5 49 5C 86 62 14 F0 B4 5F D7 95 36 65 3E AD 8A 16 23 1E 48 DC 11 F8 33 D7 C1 3F 9D E6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 B4 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
解密以后:
00 2E BE 01 00 01 00 00 00 00 34 54 9A 4E 3E 4E 41 13 10 FC 99 06 01 74 5B 10 D5 DD 12 01 DD D1 FE 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 B4 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
void Decryptionr( unsigned char* SourceData, unsigned char *key,unsigned char* PurposeData)
{
int i,j;
unsigned char uckey64[8][8],ucMw[8][8];
/*通过key[8]组合出一个[8][8]的 uckey64*/
for(i=0;i<8;i++) { uckey64[0][i]=*(key+i); }
for(i=0;i<8;i++) { uckey64[1][i]=*(key+7-i); }
for(i=0;i<7;i++) { uckey64[2][i]=*(key+i+1); } uckey64[2][7]=*(key+0);
for(i=0;i<6;i++) { uckey64[3][i]=*(key+i+2); } for(i=0;i<2;i++) { uckey64[3][6+i]=*(key+i); }
for(i=0;i<5;i++) { uckey64[4][i]=*(key+i+3); } for(i=0;i<3;i++) { uckey64[4][5+i]=*(key+i); }
for(i=0;i<4;i++) { uckey64[5][i]=*(key+i+4); } for(i=0;i<4;i++) { uckey64[5][4+i]=*(key+i); }
for(i=0;i<3;i++) { uckey64[6][i]=*(key+i+5); } for(i=0;i<5;i++) { uckey64[6][3+i]=*(key+i); }
for(i=0;i<2;i++) { uckey64[7][i]=*(key+i+6); } for(i=0;i<6;i++) { uckey64[7][2+i]=*(key+i); }
/*把明文的64个字节拿出来放到二维数组*/
for(j=0;j<8;j++)
for(i=0;i<8;i++)
ucMw[j][i]=SourceData[j*8+i];
/*二维数组拿去加密解密*/
for(j=0;j<8;j++)
DecryStr(ucMw[j],uckey64[j],ucMw[j]);
/*二位数组的结果拿出来赋值给返回值*/
for(j=0;j<8;j++)
for(i=0;i<8;i++)
PurposeData[j*8+i]=ucMw[j][i];
}
宗旨:传入一个报文(也就是读卡的100个成员的数组),一把钥匙(也就是UID),返回给我一个新的报文(解密之后的)
第一步1:钥匙[8]---->制作成[8][8] 也就是一把钥匙变成8把钥匙
第二步2:报文[64]--->制作成[8][8] 也就是前面64个成员参加解密 是报文的分块吧 ( 趴,贴过来。)
第三步3:分8次去解密,每次拿着第i把钥匙[8]和第i块信息[8]
第三步3.1:钥匙[8]---->制作成[8][8] 用到BitPMC
第三步3.2:信息[8] 和上面的[8][8]去解密 得到新的信息[8]
第三步3.2:信息[8] 自己整理一下
第四步:解密结束[8][8]给返回值。
++++++++++++++++++++++++下面是备用第二套测试数据+++++++++++++++++++++++++
之前
[26 4E 27 17 8F 45 27 DB 9D 8C A6 55 2A C3 CF A6 3D 8C 2E D6 3C 6B 2F 49 F9 D0 DE C6 0C E5 C2 E3 3C 1E 44 A5 0F 4C 9A 9F D4 EE 82 79 B3 A5 2F E7 BE A8 82 3A 23 1F 4C 56 C3 F0 01 EB 20 74 0D 86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
之后
[00 43 BE 01 00 01 00 00 00 00 9A 9F D1 91 4E 53 41 17 30 FC 99 04 28 8A F6 AF 15 EA 12 01 1A 50 42 10 22 19 90 01 22 60 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
CARD ID: : [79 8E 17 0A 8F 21 02 E0 ]