Mifare DESFire EV1 Change Key error

Forum / MIFARE SmartCard IC`s / MIFARE DESFire / Mifare DESFire EV1 Change Key error

  • 6. March 2017 at 17:32
    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
Viewing 1 post (of 1 total)

You must be logged in to reply to this topic.