微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TapLinx-Mifare Plus EV1 SL1混合模式身份验证

如何解决TapLinx-Mifare Plus EV1 SL1混合模式身份验证

我正在使用NXP Taplinx库在Android中工作。我正在使用的卡类型是在安全级别1(混合模式)下运行的mifare Plus EV1 RFID卡。

我有一个特定的扇区(扇区6),它在安全性级别3中运行,并且需要使用AES密钥进行身份验证,但是我无法使用SDK中提供的 authenticateFirst 方法成功进行身份验证。

返回异常:

com.nxp.nfclib.exceptions.SecurityException:数据未按块大小对齐

其他信息: 6 READ Failed(数据未按块大小对齐) 6个PCD CAPS(000000000000)

private void readSL3Sector(IPlusEV1SL1 plusEV1SL1) {

KeyData keyData = new KeyData();
keyData.setKey(new SecretKeySpec(SampleAppKeys.KEY_AES128,"AES"));
try {
IPlus.CardDetails cardDetails = plusEV1SL1.getSL3SectorHelper().getCardDetails();
System.out.println("UID: " + Utilities.bytetoHexString(cardDetails.uid));
System.out.println("SL: " + cardDetails.securityLevel);
System.out.println("vendOR: " + cardDetails.vendorID);
System.out.println("SAK: " + cardDetails.sak);

byte[] bytes = plusEV1SL1.activateLayer4();
System.out.println("RATS: " + Utilities.bytetoHexString(bytes));

int sector = 6;
byte[] byPcdCaps = new byte[6];
try {
System.out.println(sector + " STARTING AUTHENTICATION");

//Get the memory address from sector
int memoryaddress = plusEV1SL1.getSL3SectorHelper().sectorNumberToBlockNumberForAESKeys((byte) sector);
System.out.println(sector + " SECTOR MEMORY ADDRESS: " + memoryaddress);

plusEV1SL1.getSL3SectorHelper().authenticateFirst(memoryaddress,keyData,byPcdCaps);
System.out.println(sector + " Authentication result: " + Utilities.bytetoHexString(byPcdCaps));

byte[] read = plusEV1SL1.getSL3SectorHelper().read(IPlusSL3.ReadMode.Plain_ResponseMACed_CommandMACed,0);
System.out.println(sector + " Block Data BYTES: " + Utilities.dumpBytes(read));
System.out.println(sector + " Block Data HEX: " + Utilities.bytetoHexString(read));
}catch(Exception ex){
System.out.println(sector + " READ Failed (" + ex.getMessage() + ")");
System.out.println(sector + " PCD CAPS (" + Utilities.bytetoHexString(byPcdCaps) + ")");
ex.printstacktrace();
showMessage(ex.getMessage(),PRINT);
}
} catch (Exception ex) {
System.out.println("CONNECT Failed (" + ex.getMessage() + ")");
ex.printstacktrace();
showMessage(ex.getMessage(),PRINT);
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。