我有一些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发送到卡的方向上,以便使卡可读,那就很方便了。
暂无答案!
目前还没有任何答案,快来回答吧!