Forum › MIFARE SmartCard IC`s › MIFARE DESFire › I have problem in AUTHENTICATION › Re: I have problem in AUTHENTICATION
Hello . thanks for your answer.
I don't use SDK.
I writing C app in keil with stm32 microcontroller.
I send ( 0x0a 0x00) to Desfire card and card replay a 8 byte random number .
then I don't no what to do.
please help me .
I attach my code here:
bool DesFire_Authenticate(const uint8_t *key)
{
uint8_t des_buffer_1[16];
uint8_t des_buffer_2[16];
desInit(&des,key,8);
send_buffer[0] = 0x0A; // cmd
send_buffer[1] = MDAR_KEY0; // key number
if(PN532_transfer(send_buffer,2,get_buffer,&get_len)== true)
{
}
else
{
printf("can not send n");
return false;
}
if(get_buffer[0] != 0xAF)
return false;
//=====================================
send_buffer[0] = 0xAF;
for(int i=9 ; i< 17 ; i++)
{
des_buffer_1 = get_buffer;
}
desDecryptBlock(&des,des_buffer_1,des_buffer_2);
for(int i=9 ; i< 17 ; i++)
{
send_buffer = des_buffer_2;
}
for(int i=0 ; i< 8 ; i++)
des_buffer_1 = key;
desEncryptBlock(&des,des_buffer_1,des_buffer_2);
for(int i=1 ; i< 9 ; i++)
send_buffer = des_buffer_2;
printf("send : ");
for(int i =0 ; i< 17 ; i++)
printf("%02X,",send_buffer);
printf("n");
if(PN532_transfer(send_buffer,17,get_buffer,&get_len)== true)
{
for(int i=0 ; i<get_len ; i++)
{
printf("%02X ",get_buffer);
}
printf("n");
}
else
{
printf("can not send n");
return false;
}
return true;
}
I don't use SDK.
I writing C app in keil with stm32 microcontroller.
I send ( 0x0a 0x00) to Desfire card and card replay a 8 byte random number .
then I don't no what to do.
please help me .
I attach my code here:
bool DesFire_Authenticate(const uint8_t *key)
{
uint8_t des_buffer_1[16];
uint8_t des_buffer_2[16];
desInit(&des,key,8);
send_buffer[0] = 0x0A; // cmd
send_buffer[1] = MDAR_KEY0; // key number
if(PN532_transfer(send_buffer,2,get_buffer,&get_len)== true)
{
}
else
{
printf("can not send n");
return false;
}
if(get_buffer[0] != 0xAF)
return false;
//=====================================
send_buffer[0] = 0xAF;
for(int i=9 ; i< 17 ; i++)
{
des_buffer_1 = get_buffer;
}
desDecryptBlock(&des,des_buffer_1,des_buffer_2);
for(int i=9 ; i< 17 ; i++)
{
send_buffer = des_buffer_2;
}
for(int i=0 ; i< 8 ; i++)
des_buffer_1 = key;
desEncryptBlock(&des,des_buffer_1,des_buffer_2);
for(int i=1 ; i< 9 ; i++)
send_buffer = des_buffer_2;
printf("send : ");
for(int i =0 ; i< 17 ; i++)
printf("%02X,",send_buffer);
printf("n");
if(PN532_transfer(send_buffer,17,get_buffer,&get_len)== true)
{
for(int i=0 ; i<get_len ; i++)
{
printf("%02X ",get_buffer);
}
printf("n");
}
else
{
printf("can not send n");
return false;
}
return true;
}
+ 0
|
- 0