我正在尝试构建一个NFC支持的智能门,使用NFC支持的android手机作为钥匙卡。我使用的是NodeMcu和RC522 NFC读取器。下面的代码可以很好地读取经典RFID卡。当我读到手机的RFID时,手机的RFID一直在变化。
#包括 //SPI küphanemizi tanımlıyoruz。#包括 //MFRC522 522 küphanemizi tanımlıyoruz。#包括 LiquidCrystal lcd(7、6、5、4、3、2);int RST_PIN = 9;//lcd 522 modülüreset pinini tanımlıyoruz。int SS_PIN = 10;//ı522 modülüchip选择pinini tanımlıyoruz。int buzzerPin = 8;//蜂鸣器马达皮尼棕褐色ımlıyoruz。MFRC522 rfid(SS_PIN,RST_PIN);//ü522 modülüayarlarınıyapıyoruz.{ Serial.begin(9600);//Serişmeyi başlatıyoruz。SPI.begin();//SPI iletişimini başlatıyoruz。rfid.PCD_Init();//ı522 modülünübaşlatıyoruz.pinMode(buzzerPin,OUTPUT);lcd.begin(16,2);lcd.print(“读卡器!”);}array_to_string(字节array[],无符号int len,char buffer[]) { for (无符号int i= 0;i< len;i++) {字节nib1 = (arrayi >> 4) & 0x0F;字节nib2 = (arrayi >> 0) & 0x0F;bufferi*2+0 = nib1 < 0xA?'0‘+ nib1:'A’+ nib1 - 0xA;bufferi*2+1 = nib2 < 0xA?'0‘+ nib2:'A’+ nib2 - 0xA;} bufferlen*2 = '\0';}void循环(){ if (!Rfid.PICC_IsNewCardPresent() //Yeni kartın okunmasınıbekliyoruz.返回;如果(!)Rfid.PICC_ReadCardSerial() //Kart okunmadığızaman bekliyoruz.返回;char cardInput32 = "";rfid.PICC_DumpDetailsToSerial(&(rfid.uid));//转储关于卡片array_to_string(rfid.uid.uidByte,4,cardInput)的一些详细信息;//Insert (字节数组、长度、输出字符数组) printCardToScreen(cardInput);lcd.setCursor(0,0);lcd.print(“");lcd.setCursor(0,0);lcd.print(cardInput);digitalWrite(buzzerPin,高);延迟(1000);digitalWrite(buzzerPin,LOW);延迟(5000);lcd.print(“);lcd.setCursor(0,0);lcd.print(”读卡器!");rfid.PICC_HaltA();} void printCardToScreen(String cardInput){ Serial.print("ID Numarasi:");Serial.print(cardInput);Serial.print(“”);Serial.println("");}
发布于 2020-11-14 20:38:09
在任何安全应用程序中使用RFID UID是一个非常糟糕的主意,因为它不一定是唯一的,特别是因为您似乎在寻找一个4字节的UID。
许多卡片类型已经移动到一个7字节UID,因为没有足够的组合在4个字节。一些卡类型,UID是用户可编程的,对于一些卡片类型,如Mifare经典类型卡,UID应该在工厂编程,有中国的克隆,允许UID被改变。
有了一个模拟卡,这是Android手机正在做的,返回的UID可以很容易地编程到任何价值。
UID的设计只是为了帮助区分一张卡和另一张卡,当多张卡同时在读取器的范围内时,因此它只需要有可能多张卡有不同的UID,而从电话中随机数的UID很有可能达到。即使这样的后果也很小,两个UID是一样的,它只是一个失败的卡片阅读。
这就引出了为什么默认更改UID,这可能是一个隐私特性,所以它不能用来跟踪手机,因为NFC被认为是一种不需要其他类型保护的非危险设施。
安全应用程序的一个更好的方法是使用存储在卡内存(或模拟卡内存)上的数据的加密来进行标识。
https://stackoverflow.com/questions/64837977
复制相似问题