为什么NFC使安卓手机的RFID发生变化?



我正在尝试使用支持NFC的安卓手机作为钥匙卡来构建一个支持NFC功能的智能门。我使用的是NodeMcu和RC522 NFC阅读器。下面的代码适用于读取经典RFID卡。当我读到手机的RFID时,手机的RFID一直在变化。

  1. 为什么手机的RFID会不断变化?

  2. 如果这是无法预防的,我可以使用NFC从安卓手机向RC522发送诸如"你好世界"之类的信息吗?

    #include <SPI.h>                          //SPI kütüphanemizi tanımlıyoruz.
    #include <MFRC522.h>                      //MFRC522 kütüphanemizi tanımlıyoruz.
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
    int RST_PIN = 9;                          //RC522 modülü reset pinini tanımlıyoruz.
    int SS_PIN = 10;                          //RC522 modülü chip select pinini tanımlıyoruz.
    int buzzerPin = 8;                         //Buzzer motor pinini tanımlıyoruz.
    MFRC522 rfid(SS_PIN, RST_PIN);            //RC522 modülü ayarlarını yapıyoruz.
    
    void setup() { 
    Serial.begin(9600);                     //Seri haberleşmeyi başlatıyoruz.
    SPI.begin();                            //SPI iletişimini başlatıyoruz.
    rfid.PCD_Init();                        //RC522 modülünü başlatıyoruz.
    pinMode(buzzerPin,OUTPUT);
    lcd.begin(16, 2);
    lcd.print("CARD READER!");
    }
    void array_to_string(byte array[], unsigned int len, char buffer[])
    {
    for (unsigned int i = 0; i < len; i++)
    {
    byte nib1 = (array[i] >> 4) & 0x0F;
    byte nib2 = (array[i] >> 0) & 0x0F;
    buffer[i*2+0] = nib1  < 0xA ? '0' + nib1  : 'A' + nib1  - 0xA;
    buffer[i*2+1] = nib2  < 0xA ? '0' + nib2  : 'A' + nib2  - 0xA;
    }
    buffer[len*2] = '';
    }
    void loop() {
    if ( ! rfid.PICC_IsNewCardPresent())    //Yeni kartın okunmasını bekliyoruz.
    return;
    if ( ! rfid.PICC_ReadCardSerial())      //Kart okunmadığı zaman bekliyoruz.
    return;
    char cardInput[32] = "";
    rfid.PICC_DumpDetailsToSerial(&(rfid.uid)); //dump some details about the card
    array_to_string(rfid.uid.uidByte, 4, cardInput); //Insert (byte array, length, char array for output)
    printCardToScreen(cardInput);
    lcd.setCursor(0,0);
    lcd.print("            ");
    lcd.setCursor(0,0);
    lcd.print(cardInput);  
    digitalWrite(buzzerPin,HIGH);
    delay(1000);
    digitalWrite(buzzerPin,LOW);
    delay(5000);
    lcd.print("            ");
    lcd.setCursor(0,0);
    lcd.print("CARD READER!");
    rfid.PICC_HaltA();
    }
    void printCardToScreen(String cardInput){
    Serial.print("ID Numarasi: ");
    Serial.print(cardInput);
    Serial.print(" ");
    Serial.println("");
    }
    

将RFID UID用于任何安全应用程序都是一个非常糟糕的主意,因为它不能保证为唯一,尤其是当您似乎在寻找4字节的UID时。

由于4个字节中没有足够的组合,许多卡类型已转移到7个字节的UID。有些卡类型的UID是用户可编程的,而对于某些卡类型,如Mifare Classic卡,UID应该在工厂编程,有允许更改UID的中文克隆
使用模拟卡(这是安卓手机正在做的事情(,返回的UID可以很容易地编程为任何值。

UID仅用于在多张卡同时在读卡器范围内时帮助区分一张卡和另一张卡,因此,只需要多张卡可能具有不同的UID,而手机中的随机数极有可能实现这一点。即使这样,2个UID相同的后果也很小,只是读卡失败。

这让我明白了为什么默认会更改UID,这可能是一种隐私功能,因此它不能用于跟踪手机,因为NFC被认为是一种不需要其他类型保护的非危险设施。

安全应用程序的一种更好的方法是使用存储在卡存储器(或模拟卡存储器(上的数据加密来进行识别。

相关内容

  • 没有找到相关文章

最新更新