【问题标题】:Reading Mifare 1k card with Key A and B使用密钥 A 和 B 读取 Mifare 1k 卡
【发布时间】:2016-07-23 03:36:54
【问题描述】:

我刚开始阅读 MIFARE Classic 卡,想知道如何使用密钥 A (A0A1A2A3A4A5) 和给定的密钥 B(保密)访问每个扇区。

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

  • 对于密钥 A:keyNo = 20 (0x14)
  • 对于密钥 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,这意味着 '访问条件不满足'

有没有办法验证两个密钥?

【问题讨论】:

    标签: c# nfc rfid mifare


    【解决方案1】:

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

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

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

    至于您的身份验证失败的原因很难/无法判断,因为我们不知道

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多