Я новичок в чтении карт MIFARE Classic и задаюсь вопросом, как получить доступ к каждому сектору с помощью ключа A (A0A1A2A3A4A5
) и заданного ключа B (который остается секретным).
У меня есть настройка метода, которая загружает каждый ключ в считыватель (OMNIKEY 5421):
- для ключа A: keyNo = 20 (
0x14
) - для ключа B: № ключа = 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
является типом ключа. Например. 96 (0x60
) для А и 97 (0x61
) для ВkeyNumberA
это слот от ридера
Однако, когда ключ B авторизуется, он возвращает SW 69 82
, что означает «Условия доступа не выполнены».
Есть ли способ аутентифицировать оба ключа?