阅读带有A和B键的Mifare卡片

本文关键字:键的 Mifare 卡片 | 更新日期: 2023-09-27 18:06:54

我是阅读MIFARE经典卡的新手,想知道如何使用密钥A (A0A1A2A3A4A5)和给定的密钥B(仍然保密)访问每个扇区。

我有一个方法设置,将每个键加载到读取器(OMNIKEY 5421):

  • for Key A: keyNo = 20 (0x14)
  • for Key B: keyNo = 27 (0x1B)

然后在循环中对密钥进行授权:

while (loops > 0)
{
    if (mifareCard.Authenticate(blockAddress, keyTypeA, keyNumberA) == false)
    {
        //throw new Exception("Can't authenticate under key 0 (key type A)");
        //DisplayText("WARNING: authentication under transport key failed. Ending test sequence.");
        Debug.WriteLine("WARNING: authentication under transport key A failed. Ending test sequence.");
        return;
    }
    if (mifareCard.Authenticate(blockAddress, keyTypeB, keyNumberB) == false)
    {
        //throw new Exception("Can't authenticate under key 0 (key type A)");
        //DisplayText("WARNING: authentication under transport key failed. Ending test sequence.");
        Debug.WriteLine("WARNING: authentication under transport key B failed. Ending test sequence.");
        return;
    }
    loops--;
    loopsDone++;
    DisplayText("OK-authenticate(loop #" + loopsDone + ") for access to sector " + sector + ", block " + blockWithinSector);
}
  • blockAddress为区块号
  • keyTypeA为密钥类型。例如A为96 (0x60), B为97 (0x61)
  • keyNumberA为读取器的插槽

然而,当键B获得授权时,它返回一个SW 69 82,这意味着'访问条件未满足'

是否有一种方法来验证两个密钥?

阅读带有A和B键的Mifare卡片

逐个尝试使用两个密钥进行身份验证是完全可以的。如果密钥正确,则两次验证尝试都将成功。

从实际的角度来看,我不清楚为什么要使用两个密钥进行身份验证。在典型的MIFARE Classic应用场景中,您将只在每端使用一个键,例如

  • 键A读取字段中不太可信机器的扇区<=>键B写入用于个性化的可信机器的扇区
  • 在现场POS机/自动售货机上减少卡余额的A键<=>在可信/更安全的充值点增加卡余额的B键

由于我们不知道,很难/不可能告诉你为什么你的情况认证失败

  • 您如何实现mifareCard.Authenticate以及您实际提供的值作为参数(尽管当您成功使用键A时,它们可能是正确的)
  • 你是如何配置你的卡的(访问位是否正确设置以允许使用密钥B进行身份验证?你是否使用了正确的B键值?)

http://cache.nxp.com/documents/data_sheet/MF1S50YYX_V1.pdf检查接入条件。默认情况下,任何新的rfid mifare经典1k标签都处于传输配置中。请联系API提供商。他们将向您发送更新的DLL,其中包括修改访问条件和验证/修改这两个密钥的方法。A|B键默认值为" ffffffffff "(12字节)