|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
Есть вот такой ридер карт Есть под него карточки на 1K Нужно научится читать и писать на них информацию. Сколько не искал, все какие то готовые программки под конкретный тип ридера. Может кто подскажет что почитать чтоб разобраться и понять как с ними работать? PS использовать их нужно в приложении под WinForms, потом написал сюда. -- понимать что ты чего-то не знаешь - мудро, понимать что ты даже не знаешь, что чего-то не знаешь - печально, но это факт, который таки очень полезно понимать :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:23 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolek, Правильно, сначала изучить PC/SC API ридера затем изучить , что такое MIFARE 1K , изучить AN10787 MIFARE Application Directory (MAD) . Или в случае кастомного хранения данных на карте писать в сектора. Не совсем понятен вопрос ваш. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 13:56 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
Ken@t, да, API ридера читаю, спецификацию на MIFARE 1K читаю, но может есть в более доступном виде? может и на русском ? а то сложновато пока, не сталкивался раньше с программированием железяк .. раньше все формочки да базешки.. а сами вопросы просты: 1. как прочитать значение из нужного блока нужного сектора 2. как это перевести в простые типы (int, decimal, datetime, string) 3. как значения простых типов записать в нужный блок нужного сектора и это все на c# если можно, напишу в личку, у вас адрес скрыт PS пока я понял что надо пользоваться методами из Winscard.dll https://msdn.microsoft.com/en-us/library/windows/desktop/aa380141(v=vs.85).aspx но до понимания еще не дошел ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 14:47 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolek, 1. C сайта документацию скачайте 2. Лист 8-9 алгоритм подключения к ридеру и функции API да ещё и ссылками на мсдн 3. APDU командами производите считывание / запись / управление с 27 листа примеры с картинками 29 лист ваш mifare 4. любой тип данных это набор байт 1-2-4-8- итд, либо делаете структуру и пишите на карту в сектора или используете MAD. Можно как вариант TLV X.690 стандарт. И прежде всего понимание предметной области применения и сами, сами или адресная консультация , но это работа с вознаграждением ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 16:55 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2015, 04:45 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
С помощью pcsc-sharp получилось увидеть карту, но с этими APDU командами что-то труба совсем. И по-русски информации практически нет или я плохо искал? Посоветуйте какие-нить нормальные мануалы по этим APDU (( ? Как я понял для доступа к каждому блоку нужна авторизация (на каждый блок своя авторизация) Для карт есть ключи А и B по умолчанию, но их как то можно поменять , опять же командой ADPU чтоб потом не всякий смог прочитать блоки? Ключи тогда должны быть зашиты в коде управления ридером? Не укладывается понятие записи в []byte структуру (( Каша в голове ( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 13:13 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolek, Application Programming Interface API Driver Manual of ACR1252U NFC Forum-Certified Reader скачайте с сайта , страница 30 apdu ваши Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 14:11 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
Ken@t, Спасибо за пример сериализации. Создал свою структуру карты для удобной работы с данными карты. Создал структуру согласно секторам и блокам карты с типами свойств byte[] Создал хелперы для перевода из одной структуры в другую. Все отлично работает. Теперь самое сложное это все прочитать данные с карты и записать их обратно. В этом у меня еще проблемы. Попытаюсь написать как я что понял и прошу меня поправить и пояснить непонятное. Вот тут немного по-русски написано: о APDU командах С моем типе карты (mifare 1k), 16 секторов, по 4 блока каждый. Каждый блок по 16 байт. В каждом секторе блоки 1,2,3 - данные, 4 - для авторизации к сектору. Авторизация - это запись в блок 4 каждого сектора ключей (типа A и B), признака какой ключ использовать на чтение и какой на запись). Особенность первого сектора в том что его блок 1 заполнен уникальным идентификатором карты и доступен только на чтение. При изготовлении на карте прописаны значения ключей A и B и тип доступа по умолчанию (не понял только какие именно, где-то пишут что там 0 а где-то 1, где-то пишут в 16ричном формате , где-то в 10тичном, где посмотреть правильные значения не понял) Начнем с простой команды, просто прочитать нужный Формат читающей команды, C-APDU : Header: CLA INS P1 P2 Body: [Lc field] [Data field] [Le field] Что есть что: CLA - Class байт. Содержит метаданные команды (логический канал, Secure Messaging и т.д.). Вот ваще не понятно: что за канал, в каком случаем какой он? чем определяется? Смотрим стандарт: Видимо CLA это признак типа команды, как ее надо интерпретировать при передачи в картридер Одно из возможных значений: FF - зарезервировано для PTS (что такое PTS не понятно) В демке к pcsc-sharp команда на чтение первого сектора имеет CLA = FF, в каких случаях оно должно быть другое не понял INS - Instruction байт. Код инструкции. Это шестнадцатеричное число, старший ниббл которого не может быть 6 или 9. При этом младший ниббл всегда является четным числом. По русски это тип команды, что именно нужно сделать кардридеру ? Смотрим в стандарте варианты: Table 11 - INS codes defined in this part of ISO/IEC 7816 Понимаем что для чтения нужно значение INS = 'CA' Далее самое интересное: параметры P1 P2, это как бы параметры смысл и необходимость которых зависит от INS Смотрим в стандарте: 5.4.3 Parameter bytes и ничего не понимаем А где указаваются адреса сектора и блоков которые хотим прочитать ? Где и как авторизироваться для нужного сектора ? В демке pcsc-sharp вот такой код нормально читает идентификатор карты из первого блока первого (нулевого) сектора: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
но где там авторизация, где указано из какого сектора/блока читать непонятно (( До понимание структуры Body еще не дошел вообще ... Уфффф... прошу пояснить и направить ... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 10:24 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
Коллеги, прошу помощи: вот пример: отправляем команду в ридер: FF-CA-00-00-00 (тут из осмысленного только CA - команда GetData, остальное - значения не используются) получаем ответ: E1-B7-46-D9-90-00, тут 90-00 - признак успешности операции, а E1-B7-46-D9 - как я понял, идентификатор карты переводим его в число : BitConverter.ToUInt32(responseApdu.GetData(), 0) и получаем например ИД карты = 3645290465, проверил это с помощью найденных демо программ работы mifare 1k картами, вроде совпадает но что непонятно: 1. в карте 16 секторов, по 4 блока (3 из которых под хранимые значения) , где мы в команде на чтение указали, что надо прочитать именно первый блок первого сектора (именно там хранится зашитый производителем идентификатор карты) ? 2. в стандарте написано что для чтения и записи необходима авторизация для каждого сектора своими ключами (возможно они могут быть одинаковые), но где мы в команде на чтение указываем эти ключи ? не могу сдвинуться дальше в понимании... может быть чтение CA - команда GetData подразумевает чтение сразу всех данных карты ? а потом уж парсинг того что получили? но как тогда авторизовываться для каждого блока в отдельности ? мне нужно: поменять ключи по умолчанию на свои (для чтения и записи), читать одними ключами, а писать другими, чтобы пользователь без нужных прав не смог прочитать и изменить содержимое карты ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2015, 11:57 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekКоллеги, прошу помощи: вот пример: отправляем команду в ридер: FF-CA-00-00-00 (тут из осмысленного только CA - команда GetData, остальное - значения не используются) получаем ответ: E1-B7-46-D9-90-00, тут 90-00 - признак успешности операции, а E1-B7-46-D9 - как я понял, идентификатор карты переводим его в число : BitConverter.ToUInt32(responseApdu.GetData(), 0) и получаем например ИД карты = 3645290465, проверил это с помощью найденных демо программ работы mifare 1k картами, вроде совпадает но что непонятно: 1. в карте 16 секторов, по 4 блока (3 из которых под хранимые значения) , где мы в команде на чтение указали, что надо прочитать именно первый блок первого сектора (именно там хранится зашитый производителем идентификатор карты) ? 2. в стандарте написано что для чтения и записи необходима авторизация для каждого сектора своими ключами (возможно они могут быть одинаковые), но где мы в команде на чтение указываем эти ключи ? не могу сдвинуться дальше в понимании... может быть чтение CA - команда GetData подразумевает чтение сразу всех данных карты ? а потом уж парсинг того что получили? но как тогда авторизовываться для каждого блока в отдельности ? мне нужно: поменять ключи по умолчанию на свои (для чтения и записи), читать одними ключами, а писать другими, чтобы пользователь без нужных прав не смог прочитать и изменить содержимое карты Команда FA C0 00 00 00 - получение идентификатора карты. Карты Mifare - проприетарные. Они лишь частично соответствуют станарту 14443 (после 4 части пошли по своему пути). Для чтения блока карты Mifare надо использовать последовательность команд аутентификация сектора - чтение блока. И, соответственно, требуется чтобы ключ на чтение блока совпадал с ключом в слоте ридера. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2015, 14:26 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikLelikBolekКоллеги, прошу помощи: вот пример: отправляем команду в ридер: FF-CA-00-00-00 (тут из осмысленного только CA - команда GetData, остальное - значения не используются) получаем ответ: E1-B7-46-D9-90-00, тут 90-00 - признак успешности операции, а E1-B7-46-D9 - как я понял, идентификатор карты переводим его в число : BitConverter.ToUInt32(responseApdu.GetData(), 0) и получаем например ИД карты = 3645290465, проверил это с помощью найденных демо программ работы mifare 1k картами, вроде совпадает но что непонятно: 1. в карте 16 секторов, по 4 блока (3 из которых под хранимые значения) , где мы в команде на чтение указали, что надо прочитать именно первый блок первого сектора (именно там хранится зашитый производителем идентификатор карты) ? 2. в стандарте написано что для чтения и записи необходима авторизация для каждого сектора своими ключами (возможно они могут быть одинаковые), но где мы в команде на чтение указываем эти ключи ? не могу сдвинуться дальше в понимании... может быть чтение CA - команда GetData подразумевает чтение сразу всех данных карты ? а потом уж парсинг того что получили? но как тогда авторизовываться для каждого блока в отдельности ? мне нужно: поменять ключи по умолчанию на свои (для чтения и записи), читать одними ключами, а писать другими, чтобы пользователь без нужных прав не смог прочитать и изменить содержимое карты Команда FA C0 00 00 00 - получение идентификатора карты. Карты Mifare - проприетарные. Они лишь частично соответствуют станарту 14443 (после 4 части пошли по своему пути). Для чтения блока карты Mifare надо использовать последовательность команд аутентификация сектора - чтение блока. И, соответственно, требуется чтобы ключ на чтение блока совпадал с ключом в слоте ридера. Разберитесь для начала с командами. Скачайте простенькое приложение, которое посредством APDU команд позволит Вам общаться через ридер с картами. А потом уже эти "отработанные" команды используйте в своем приложении ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2015, 14:27 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
И еще, в соответствии со спецификацией на Mifare - переводить шестнадцатеричный идентификатор карты в другие форматы - дурной тон ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2015, 14:29 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekКак я понял для доступа к каждому блоку нужна авторизация (на каждый блок своя авторизация) С помощью команд аутентификации - аутентифицируется по любому блоку весь сектор. Так что, если хотите прочитать весь сектор, достаточно произвести аутентификацию по-любому блоку из этого сектора. В картах Mifare Plus - если у секторов ключи совпадают - достаточно тоже одной аутентификации. LelikBolekДля карт есть ключи А и B по умолчанию, но их как то можно поменять , опять же командой ADPU чтоб потом не всякий смог прочитать блоки? Перезаписываются командой Write LelikBolekКлючи тогда должны быть зашиты в коде управления ридером? Ключи должны быть в памяти считывателя (в энергозащищенной или энергонезащищенной) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2015, 14:33 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikИ еще, в соответствии со спецификацией на Mifare - переводить шестнадцатеричный идентификатор карты в другие форматы - дурной тон А чем это плохо ? Если это идентификатор уникальный, а мне дальше этот идентификатор надо использовать в учетной системе для привязки данных владельца карты к карте. Я и думал переведенный идентификатор использовать как ID карты. В чем могут быть грабли ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 07:19 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekBelavikИ еще, в соответствии со спецификацией на Mifare - переводить шестнадцатеричный идентификатор карты в другие форматы - дурной тон А чем это плохо ? Если это идентификатор уникальный, а мне дальше этот идентификатор надо использовать в учетной системе для привязки данных владельца карты к карте. Я и думал переведенный идентификатор использовать как ID карты. В чем могут быть грабли ? Этот идентификатор не у всех карт уникален. Можешь почитать MIFARE and handling of UIDs ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 11:29 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikLelikBolekпропущено... А чем это плохо ? Если это идентификатор уникальный, а мне дальше этот идентификатор надо использовать в учетной системе для привязки данных владельца карты к карте. Я и думал переведенный идентификатор использовать как ID карты. В чем могут быть грабли ? Этот идентификатор не у всех карт уникален. Можешь почитать MIFARE and handling of UIDs Хм, там же в самом начале написано: Note: A UID is not a “serial number”, but a unique identifier. There is no recommendation how to turn the array of bytes into an integer. Я понял так что UID это не серийный номер, но это уникальный идентификатор. Не существует рекомендаций по переводу байтов в число, т.е. как хотите так и переводите. В чем же грабли ? Там же описываются рекомендации по совместной работе с 4х байтными и 7ми байтными идентификаторами.. Пока не понял зачем мне 7ми байтные, если 4х байтный (если не серые китайские карты) и так обеспечат мне уникальность ... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 11:55 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
Еще по поводу UID: читаем UID командой GET DATA: {FF CA 00 00 00 } получаем UID: E1B746D9 читаем первый блок первого сектора командой READ BINARY: {FF B0 00 00 10} получаем значение manufactured блока: E1B746D9 C9080400016B91281520481D видим что первые 4 байта - это тот же самый UID, а что тогда означают оставшиеся 12 байт ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 15:21 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekЕще по поводу UID: читаем UID командой GET DATA: {FF CA 00 00 00 } получаем UID: E1B746D9 читаем первый блок первого сектора командой READ BINARY: {FF B0 00 00 10} получаем значение manufactured блока: E1B746D9 C9080400016B91281520481D видим что первые 4 байта - это тот же самый UID, а что тогда означают оставшиеся 12 байт ? Эти UID могу не совпадать. UID не всегда уникален. Зависит от того, в каком диапазоне его значение. Максимальное значение в 4 байта - 4.294.967.295 - уже давно исчерпано ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 15:54 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikLelikBolekЕще по поводу UID: читаем UID командой GET DATA: {FF CA 00 00 00 } получаем UID: E1B746D9 читаем первый блок первого сектора командой READ BINARY: {FF B0 00 00 10} получаем значение manufactured блока: E1B746D9 C9080400016B91281520481D видим что первые 4 байта - это тот же самый UID, а что тогда означают оставшиеся 12 байт ? Эти UID могу не совпадать. UID не всегда уникален. Зависит от того, в каком диапазоне его значение. Максимальное значение в 4 байта - 4.294.967.295 - уже давно исчерпано В тех 12 байтах производитель может писать что угодно. Встречал инфу о чипе ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 15:55 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekЕще по поводу UID: читаем UID командой GET DATA: {FF CA 00 00 00 } получаем UID: E1B746D9 читаем первый блок первого сектора командой READ BINARY: {FF B0 00 00 10} получаем значение manufactured блока: E1B746D9 C9080400016B91281520481D видим что первые 4 байта - это тот же самый UID, а что тогда означают оставшиеся 12 байт ? В некоторых картах нулевой блок нулевого сектора читается без аутентификации ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 15:56 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikЭти UID могу не совпадать. UID не всегда уникален. Зависит от того, в каком диапазоне его значение. Максимальное значение в 4 байта - 4.294.967.295 - уже давно исчерпано и как с этим жить ? как по правильному обеспечить уникальность карты ? считать 4 байтное UID командой CA сгенерить еще 4 байта (например) от случайного числа, записать его в блок 2 сектора 0 и потом получая UID складывать эти два значений (склеивать) ? или есть более правильные способы ? или в http://www.nxp.com/documents/application_note/AN10927.pdf об этом и говорится. но я не понял ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 15:59 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
LelikBolekBelavikЭти UID могу не совпадать. UID не всегда уникален. Зависит от того, в каком диапазоне его значение. Максимальное значение в 4 байта - 4.294.967.295 - уже давно исчерпано и как с этим жить ? как по правильному обеспечить уникальность карты ? считать 4 байтное UID командой CA сгенерить еще 4 байта (например) от случайного числа, записать его в блок 2 сектора 0 и потом получая UID складывать эти два значений (склеивать) ? или есть более правильные способы ? или в http://www.nxp.com/documents/application_note/AN10927.pdf об этом и говорится. но я не понял ? Пиши в свободный блок свое число. Или надейся что дубликат карты не попадется ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 16:00 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikLelikBolekпропущено... и как с этим жить ? как по правильному обеспечить уникальность карты ? считать 4 байтное UID командой CA сгенерить еще 4 байта (например) от случайного числа, записать его в блок 2 сектора 0 и потом получая UID складывать эти два значений (склеивать) ? или есть более правильные способы ? или в http://www.nxp.com/documents/application_note/AN10927.pdf об этом и говорится. но я не понял ? Пиши в свободный блок свое число. Или надейся что дубликат карты не попадется МОжно проанализировать uid по значению и понять, может ли у него быть дубликат ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 16:01 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikBelavikпропущено... Пиши в свободный блок свое число. Или надейся что дубликат карты не попадется МОжно проанализировать uid по значению и понять, может ли у него быть дубликат см таблицу на стр №5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 16:02 |
|
где что почитать про чтение\запись nfc карт Mifare
|
|||
---|---|---|---|
#18+
BelavikBelavikпропущено... МОжно проанализировать uid по значению и понять, может ли у него быть дубликат см таблицу на стр №5 что-то не осилил ту таблицу: вот два singeUid: E1B746D9 и 6ADC50D5 как им правильно проанализировать на возможность дубликатов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2015, 16:07 |
|
|
start [/forum/topic.php?fid=20&msg=39040727&tid=1399082]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
127ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 495ms |
0 / 0 |