#python #python-3.x #nfc #access-control #lockbits
#python #python-3.x #nfc #контроль доступа #блокировки
Вопрос:
У меня есть NTAG213
наклейка NFC. Мне было интересно, как я могу сделать эту наклейку доступной только для чтения. Если позже я переключусь на NTAG215
, как я мог бы сделать этот тег доступным только для чтения. Какой процесс задействован в создании различных типов наклеек, доступных только для чтения. Когда я говорю «только для чтения», я имею в виду, что записи NFC никогда не могут быть изменены, но устройства все еще могут читать записи без аутентификации.
Я прочиталhttps://answers .launchpad.net/nfcpy/ question/242606 и попытался реализовать это решение
import nfc
from time import sleep
from nfc.clf import RemoteTarget
import ndef
clf = nfc.ContactlessFrontend('usb')
while True:
target = clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F'))
if target is None:
sleep(1)
continue
serial = target.sdd_res.hex()
tag = nfc.tag.activate(clf, target)
if not tag.ndef:
print("No NDEF records found!")
continue
for record in tag.ndef.records:
print("Found record: " str(record))
record = ndef.UriRecord("https://www.example.com")
tag.ndef.records = [record]
# Code is fine until it gets to these tag indexes
tag[15] = tag[15] | 0x0F
tag[10] = 0xFF
tag[11] = 0xFF
Я получаю сообщение об ошибке:
File "test.py", line 26, in <module>
tag[15] = tag[15] | 0x0F
TypeError: 'NTAG213' object does not support indexing
Комментарии:
1. Все подробности в техническом описании карты nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf Существуют различные способы сделать это с записью в нужное место памяти, чтобы изменить биты блокировки, есть 2 способа навсегда сделать память доступной только для чтения (по одному для разных областей памяти) или, вероятно, гораздо лучше защитить операции записи паролем (поскольку это можно отменить, если вы знаете пароль)
2.
tag
это класс, а не массив. Вы не можете получить доступ к классу по индексу массива. Вы ДОЛЖНЫ использовать функции, определенные в этом классе (или API).
Ответ №1:
Глядя на то, что в библиотеке Python есть простой способ сделать доступ только для чтения с использованием байтов блокировки или с помощью пароля.
https://nfcpy.readthedocs.io/en/stable-0.10/modules/tag.html#nfc.tag.tt2_nxp.NTAG21x
Просто вызовите protect
метод для tag
объекта с паролем или без него (без пароля использует байты блокировки и доступен только для чтения).
Итак, в библиотеке запрограммированы правильные адреса памяти и биты для переключения для различных карт, включая все карты NTAG21x.