Вы можете использовать следующий метод в iOS для отправки любой команды в NTAG:
func sendCommand(data: CmdData, completionHandler: @escaping(Data?, Error?) -> Void) {
tag?.sendMiFareCommand(commandPacket: data, completionHandler: { (data, error) in
completionHandler(data, error)
})
}
, где данные параметра - это APDU команды, а объект тега имеет тип NFCMiFareTag.
Команда APDU для записи пароля и PACK в NF C Тег:
- Пароль (FF FF FF FF): [Команда записи: CMD | Адрес | Данные] -> A2 E5 FF FF FF FF
- PACK (01 02): [Команда записи: CMD | Адрес | Данные] -> A2 E6 01 02 RFU RFU
Примечание: вместо RFU вы можете просто написать 00h или сохранить значения, выполнив следующие действия:
- Read страница E6h ----> Вы получите 16 байтов (4 страницы) данных ----> Выньте первые 4 байта, которые будут данными на странице E6 ----> Замените 0-й и 1-й байт на значение PACK для записи ----> Запишите обновленные 4 байта данных в E6h с помощью команды записи, как указано выше.
Активация защиты
После того, как значения пароля и PACK настроены в NF C, следующим шагом будет активация защиты путем определения, с какой страницы доступ для чтения / записи должен требовать аутентификации. Для этого:
- Прочитать страницу E3h ---> Скопировать первые 4 байта в data []
- Заменить значение AUTH0 на индекс 3, с первым номер страницы пользователя 04h, что означает, что любая страница, начинающаяся с 04h, потребует аутентификации для доступа для чтения (по умолчанию)
Доступ к защищенным страницам для чтения
- Пользователь вводит PWD & PACK для разблокировка тега
- Аутентифицируйте тег, используя введенные данные, используя следующую команду:
- Аутентифицировать: [Command (1Bh) | PWD] -> 1B FF FF FF FF
- Тег ответит значением PACK, которое можно проверить, сопоставив его со значением PACK, которое у вас есть для дополнительной безопасности
- Теперь, когда тег находится в состоянии аутентификации, в тег можно записать данные. ** Примечание: как только тег выходит за пределы поля, состояние аутентификации сбрасывается. Следовательно, вы должны аутентифицировать и записывать данные в одном сеансе.
- Если нет необходимости изменять PWD / PACK, никаких дальнейших действий не требуется, поскольку тег каждый раз возвращается в защищенное состояние сессия завершена, т.е. выходит за пределы поля.
Вы можете сослаться на NTAG 213/215/216 Data sheet