Я пытаюсь написать приложение C # Winforms для программирования смарт-карты MiFare 1K с помощью устройства чтения карт ACR122. Я застрял на понимании аутентификации. У меня есть пример кода, который я не понимаю, как он работает. У меня такие вопросы: 1) Есть ли несколько уровней аутентификации? Общая аутентификация и аутентификация на уровне сектора? 2) Как определить, имеет ли сектор заводской ключ по умолчанию A из FF FF FF FF FF FF FF или был ли он изменен на что-то другое? 3) Код ниже, кажется, работает, но я не вижу, чтобы ключ был включен нигде. Может кто-нибудь объяснить, как это работает для меня? 4) Как будет выглядеть команда, чтобы изменить KeyA и затем получить доступ к блоку с измененным ключом?
Я читал этот документ, но не смог найти решение: https://www.nxp.com/docs/en/data-sheet/MF1S70YYX_V1.pdf
private bool authenticateBlock(String block)
{
ClearBuffers();
SendBuff[0] = 0xFF;
SendBuff[1] = 0x86;
SendBuff[2] = 0x00;
SendBuff[3] = 0x00;
SendBuff[4] = 0x05;
SendBuff[5] = 0x01;
SendBuff[6] = 0x00;
SendBuff[7] = (byte)int.Parse(block);
SendBuff[8] = 0x60;
SendBuff[9] = (byte)int.Parse("1");
SendLen = 0x0A;
RecvLen = 0x02;
retCode = SendAPDUandDisplay(0);
if (retCode != Card.SCARD_S_SUCCESS)
{
MessageBox.Show("FAIL Authentication!");
return false;
}
return true;
}