Нужна помощь в понимании аутентификации MiFare в C # - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь написать приложение 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;
}
...