我很擅长阅读MIFARE Classic卡,并想知道如何使用密钥A(A0A1A2A3A4A5
)和给定密钥B(保密)来访问每个扇区。
我有一个方法设置,可以将每个密钥加载到阅读器中(OMNIKEY 5421):
0x14
)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
是键的类型。例如。 96(0x60
)代表A和97(0x61
)代表B keyNumberA
是读者的插槽但是,当密钥B获得授权时,它会返回SW 69 82
,这意味着
'访问条件未得到满足'
有没有办法验证两个密钥?
答案 0 :(得分:1)
尝试使用两个密钥进行身份验证后,完全没问题。如果密钥正确,两次身份验证尝试都将成功。
从实际角度来看,我不清楚为什么你想用两个密钥进行身份验证。在典型的MIFARE Classic应用程序场景中,您只能在每端使用一个密钥,例如
至于为什么认证失败在你的情况下很难/不可能告诉,因为我们不知道
mifareCard.Authenticate
以及您实际提供的值作为参数(尽管当您使用密钥A成功时,它们可能是正确的)答案 1 :(得分:-2)
http://cache.nxp.com/documents/data_sheet/MF1S50YYX_V1.pdf 检查访问条件。默认情况下,任何新的rfid mifare经典1k标签都处于传输配置中。 联系API提供商。他们会向您发送更新的DLL,包括修改访问条件的方法以及验证/修改这两个密钥。默认情况下,A | B键的键值为" FFFFFFFFFFFF"(12字节)