阅读带有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
,这意味着'访问条件未满足'
是否有一种方法来验证两个密钥?
逐个尝试使用两个密钥进行身份验证是完全可以的。如果密钥正确,则两次验证尝试都将成功。
从实际的角度来看,我不清楚为什么要使用两个密钥进行身份验证。在典型的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字节)