在sl1sl3混合模式下激活mifare plus

jgovgodb  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(243)

我有一些mifare plus卡,它们是在混合模式sl1和sl3中设置的,还有它们的aes密钥,我正在尝试读取当前sl3上的一个特定扇区。据我所知,我需要首先使用tranceive()发送rats命令以激活iso 14443-4协议,然后首先使用提供给我的密钥进行身份验证。
尽管tranceive命令返回[10 04 00],但尝试authenticatefirst()返回“invalid pcd capability[pcdcap2in]error”。如何启动第4层/身份验证以读取sl3上扇区6中的数据?
以下是我实际尝试的:

byte sector = (byte)6;
    /* ALL WORK RELATED TO MIFARE PLUS SL3 card. */
    //Get the memory address from sector
    int memoryaddress = plusEV1SL1.getSL3SectorHelper().sectorNumberToBlockNumberForAESKeys(sector);
    System.out.println("Memory Address is "+ memoryaddress);

    final byte[] KEY_AES128 = {(byte) 0xFF, (byte) 0xFF,
            (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
            (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
            (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};

    byte[] rats = {(byte)0x0E, (byte)0x80};
    byte[] ratsResponse = plusEV1SL1.transceive(rats);
    System.out.println("RATS response is:" + ratsResponse);
    /* plusEV1SL1.enableLayer4Activation(); - trying to activate layer 4 when not sending RATS command */
    KeyData keyData = new KeyData();
    keyData.setKey(new SecretKeySpec(KEY_AES128, "AES"));
    plusEV1SL1.getSL3SectorHelper().authenticateFirst(memoryaddress, keyData, new byte[16]);
    byte[] read1 = plusEV1SL1.getSL3SectorHelper().read(IPlusSL3.ReadMode.Plain_ResponseMACed_CommandMACed, memoryaddress);
    System.out.println("LAYER 4 " + Utilities.dumpBytes(read1));

或者,如果有人可以指导我应该执行的步骤的顺序,或者在c-apdu发送到卡的方向上,以便使卡可读,那就很方便了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题