gpt4 book ai didi

Android Mifare Classic 身份验证 key A 不工作

转载 作者:行者123 更新时间:2023-11-29 15:46:24 25 4
gpt4 key购买 nike

我在使用 MifareClassic.autenticateSectorWithKeyA(int sector, byte[] keyA) 方法的应用程序中遇到问题。试了很多方法都验证不了。

我的 key A 是:

byte[] key = new byte[] { (byte) 0x3c, (byte) 0x55, (byte) 0x28,
(byte) 0x12, (byte) 0x5c, (byte) 0x61, (byte) 0x00,
(byte) 0x5C, (byte) 0x71, (byte) 0x00 };
  • 这个键中的每个字节代表什么?
  • 如果我有一个像上面的3c5528125c61这样的 key ,我应该如何编写字节数组来进行身份验证,读取 block 2并获取字节?
  • 什么是 AID(应用程序代码)?我应该什么时候使用它?

最佳答案

您的 key 字节数组作为 MIFARE Classic key 没有多大意义。 MIFARE Classic 的 key 仅包含 6 个字节。因此,这将是 key 的可能值:

byte[] key = new byte[] { (byte)0x3c, (byte)0x55, (byte)0x28,
(byte)0x12, (byte)0x5c, (byte)0x61 };

如何验证一个扇区并读取一个数据 block ?

为了读取 block 2(并假设在使用上述 key 进行身份验证后它是可读的),您可以执行如下操作:

  1. 向包含要读取的 block 的扇区进行身份验证( block 2 位于扇区 0,您可以使用辅助方法 MifareClassic.blockToSector() 获取给定 block 号的扇区号.
  2. 如果身份验证成功,您可以读取该 block 。
final MifareClassic mfc = MifareClassic.get(tag);mfc.connect();final int blockNumber = 2;if (mfc.authenticateSectorWithKeyA(mfc.blockToSector(blockNumber), key)) {    final byte[] data = mfc.readBlock(blockNumber)    // TODO: do something with data}mfc.close();

什么是 AID(应用程序标识符)?我应该什么时候使用它?

MIFARE Classic 本身具有线性内存布局。 IE。一种基于 block 号寻址,其中每个 block 包含 16 个字节。这些 block 被分组为具有单独访问条件和 key 的扇区。

为了在逻辑上将此数据(扇区/ block 组)分配给特定的应用程序(例如,一些数据用于物理访问控制系统,一些数据用于电子钱包等),因此,使用一张卡对于同时存在多个应用程序,引入了 MIFARE 应用程序目录 (MAD)。 MAD 基本上是一个查找表(MIFARE Classic 1K 位于扇区 0,MIFARE Classic 4K 位于扇区 0 和 16)。该查找表将卡的每个扇区映射到一个应用程序。应用程序通过一个两字节的值来识别,即 MIFARE 应用程序标识符 (AID)。因此,如果卡使用 MAD,应用程序可以通过浏览 MAD 查找其数据扇区以查找其 AID。

关于Android Mifare Classic 身份验证 key A 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32758063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com