Forum / MIFARE SmartCard IC`s / MIFARE DESFire / Mifare DESFire EV1 Change Key error
-
Hi,
When I change the master key of DESFire Ev1 PICC,it return error code 0x1E,in addition,I can change keysettng successful,my code as follow,and I don't know whether it is correct, can you help me?
Thanks!
CmdRunState DF_ChangeKey(void *DF_Cmd,void *ReturnData,u8 *pRxTxLen)
{
u8 *cmdbuf=(u8*)DF_Cmd;
u8 newkey[16];
u8 apdu_buf[31];
s16 len=0;
u8 i;
if(*pRxTxLen!=17)//防止参数错误
{
*pRxTxLen=0;//the length of return data
return ACK_CommandErr;//parameter error
}
*pRxTxLen=0;
_memset(apdu_buf,0,sizeof(apdu_buf));
apdu_buf[0]=0x90;
apdu_buf[1]=0xC4;//ChangeKey command
apdu_buf[2]=0x00;
apdu_buf[3]=0x00;
apdu_buf[4]=25;
apdu_buf[5]=cmdbuf[0];//keyNo
if(KeyNoAuthenticated!=cmdbuf[0])
{
_memcpy(newkey,&cmdbuf[1],16); //copy new key
_memcpy(&apdu_buf[6],DESFirePICC_Key,16);//copy current key
for(i=0;i<16;i++)
apdu_buf^=newkey;
CalCrc16(&apdu_buf[6], &apdu_buf[22], 16);
CalCrc16(newkey, &apdu_buf[24], 16);
}
else
{
_memcpy(&apdu_buf[6],&cmdbuf[1],16);
CalCrc16(&apdu_buf[6], &apdu_buf[22], 16);
}
CBC_3Des_Decode(&apdu_buf[6],session_key,3);//
len=ISO14443_sendAPDU(0x00,apdu_buf,sizeof(apdu_buf),(u8*)ReturnData);
if(len<0)
{
return ACK_ACCESSERR ;//Card operation error
}
else
{
*pRxTxLen=len;
return ACK_OK ;
}
}
+ 0 | - 0
-
AuthorPosts
Viewing 1 post (of 1 total)
You must be logged in to reply to this topic.