#include<stdio.h>
#include<string.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
unsigned char *buf;
unsigned char pwd[8]={0x59,0x26,0x17,0x0A,0x8F,0x21,0x02,0xE0};
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); }
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{printf("%02X ",uckey64[i][j]);if(j==7)printf("\n");}
}
int main(void)
{
Decryptionr(buf,pwd,buf);
return 0;
}
上面就是修改PWD的8个成员,也就是tag->UID:或者CARDID
[59 26 17 0A 8F 21 02 E0 ]
%02x就是十六进制打印 保证2位
59 26 17 0A 8F 21 02 E0
E0 02 21 8F 0A 17 26 59
26 17 0A 8F 21 02 E0 59
17 0A 8F 21 02 E0 59 26
0A 8F 21 02 E0 59 26 17
8F 21 02 E0 59 26 17 0A
21 02 E0 59 26 17 0A 8F
02 E0 59 26 17 0A 8F 21