找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 12586|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

rc522讀寫,復(fù)制,修改密碼,所有扇區(qū)內(nèi)容修改

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:173447 發(fā)表于 2018-8-10 13:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//讀寫扇區(qū)的例子://全部扇區(qū)數(shù)據(jù)塊可單獨(dú)讀寫,也可全部扇區(qū)同時(shí)讀寫,可以復(fù)制全部扇區(qū)的內(nèi)容,也可以重新賦值全部扇區(qū)的內(nèi)容
#include <SPI.h>
#include <RFID.h>

RFID rfid(53,49);    //D53--讀卡器MOSI引腳、D49--讀卡器RST引腳//2560板子
#define qh      43//功能切換讀取
#define d      44//LED燈,滅代表讀狀態(tài),亮代表寫狀態(tài)
char b=0;
//4字節(jié)卡序列號(hào),第5字節(jié)為校驗(yàn)字節(jié)
unsigned char serNum[5];
//寫卡數(shù)據(jù),45為數(shù)據(jù)塊數(shù)量,16為長(zhǎng)度
//數(shù)據(jù)塊是1-15扇區(qū)相加,每個(gè)扇區(qū)3個(gè)數(shù)據(jù)塊故3*15=45;0號(hào)扇區(qū)固定不能改
unsigned char writeDate[45][16] ={
{'1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1','1', '1', '1', '1'},
{'1', '2', '2','2', '2', '2','2', '2', '2','2', '2', '2','2', '2', '2', '2'},
{'1', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'2', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'2', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'2', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'3', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'3', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'3', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'4', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'4', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'4', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'5', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'5', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'5', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'6', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'6', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'6', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'7', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'7', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'7', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'8', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'8', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'8', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'9', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'9', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'9', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},

{'1', '2', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'1', '1', '3', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
{'0', '0', '0', '4', '-', '5', '6', '7', '8', '9', 'a', 'b', 'c','d', 'e', 0},
};
unsigned char fz[45][16];
//原扇區(qū)A密碼,16個(gè)扇區(qū),每個(gè)扇區(qū)密碼6Byte
unsigned char sectorKeyA[16][16] = {
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},//0~16扇區(qū)原密碼
  //{0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},


        };
//新扇區(qū)A密碼,16個(gè)扇區(qū),每個(gè)扇區(qū)密碼6Byte,一行代表一個(gè)扇區(qū)
//改密碼只要改前面6個(gè)ff任意一個(gè), 0xff,0x07,0x80,0x69, 千萬不能動(dòng)否則可能報(bào)廢扇區(qū)
unsigned char sectorNewKeyA[16][16] = {
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},//1-16扇區(qū)新密碼
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},



        };
//char aa[16];
void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init();
pinMode(qh, INPUT);
digitalWrite(qh, 1);
pinMode(d, OUTPUT);
}

void loop()
{
  int j;
  char tmp;
  unsigned char status;
  unsigned char str[MAX_LEN];
  unsigned char blockAddr;        //選擇操作的塊地址0~63。但只能寫4的倍數(shù)+3;比如7,11,15,19---
  if(digitalRead(qh)==0) //功能按鍵操作
  {
   b=b^1;
   digitalWrite(d, b);
   delay(30);
   while(!(digitalRead(qh)));
   delay(30);
  }


  //找卡
  rfid.isCard();

  //讀取卡序列號(hào)
  if (rfid.readCardSerial())
  {
    Serial.print("The card's number is  : ");
    Serial.print(rfid.serNum[0],HEX);
    Serial.print(rfid.serNum[1],HEX);
    Serial.print(rfid.serNum[2],HEX);
    Serial.print(rfid.serNum[3],HEX);
    Serial.print(rfid.serNum[4],HEX);
    Serial.println(" ");
  }

  //選卡,返回卡容量(鎖定卡片,防止多次讀寫)
rfid.selectTag(rfid.serNum);



  //復(fù)制數(shù)據(jù)卡
  if(b==1)
  {
    for(int ii= 7;ii<64;ii=ii+4)
  {
  for(int i=ii-3;i<ii;i++)//循環(huán)寫入數(shù)據(jù)塊012,不循環(huán)就單獨(dú)寫i值
    {
  blockAddr = ii;               
  if (rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[ blockAddr/4], rfid.serNum) == MI_OK)  //認(rèn)證
  {
//    寫密碼
    status = rfid.write(blockAddr, sectorNewKeyA[blockAddr/4]);   
    //寫數(shù)據(jù)

    blockAddr =i; //數(shù)據(jù)塊i
    j=i-i/4-3;
   // status = rfid.write(blockAddr, writeDate[j]);//如果使用賦值功能則打開此行
   status = rfid.write(blockAddr, fz[j]);//如果使用復(fù)制功能則打開此行,與下面的
    if(status == MI_OK)
    {

      Serial.print("扇區(qū):");
      Serial.print(i/4);
      Serial.print("數(shù)據(jù)塊:");
      Serial.println(i);
      //Serial.println(j);
      Serial.println("Write card OK!");
    }
  }
    }

  }
  }

else
{
  //讀卡
  for(int ii= 7;ii<64;ii=ii+4)
  {   
   for(int i=ii-3;i<ii;i++)
    {
  blockAddr = ii;


  status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum);
  if (status == MI_OK)  //認(rèn)證
  {
    //讀數(shù)據(jù)
     blockAddr =i; //數(shù)據(jù)塊i
    j=i-i/4-3;
  /*********如果使用復(fù)制卡里的數(shù)據(jù)則打開,否則關(guān)閉,與上面的status = rfid.write(blockAddr, fz[j])同時(shí)使用***************/
    if( rfid.read(blockAddr, str) == MI_OK)
    {
      for(int z=0;z<16;z++)//復(fù)制扇區(qū)數(shù)據(jù)塊
      {
      fz[j][z]=str[z];   
      }
      /************************/
   //  Serial.println((char*)fz[i]);//打印復(fù)制的值,可省去
    Serial.print("扇區(qū):");
    Serial.print(blockAddr/4);
    Serial.print("數(shù)據(jù)塊:");
    Serial.print(i);
    Serial.print(":");
    Serial.print("the data is : ");
    Serial.println((char *)str);

    }
    }
  }
  }
}


  rfid.halt();//去掉本行連續(xù)讀寫

}

RFID.zip

9.02 KB, 下載次數(shù): 151, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:112693 發(fā)表于 2018-9-5 13:27 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:79006 發(fā)表于 2018-10-19 09:58 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:79006 發(fā)表于 2018-12-21 09:33 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:802567 發(fā)表于 2020-7-13 14:56 | 只看該作者
//數(shù)據(jù)塊是1-15扇區(qū)相加,每個(gè)扇區(qū)3個(gè)數(shù)據(jù)塊故3*15=45?
一個(gè)扇區(qū)不是四個(gè)數(shù)據(jù)塊嗎怎么變成三個(gè)了
回復(fù)

使用道具 舉報(bào)

6#
ID:820810 發(fā)表于 2020-9-19 01:13 | 只看該作者
加密占了四分之一吧?
回復(fù)

使用道具 舉報(bào)

7#
ID:964308 發(fā)表于 2021-10-27 08:50 來自手機(jī) | 只看該作者
domifly 發(fā)表于 2020-7-13 14:56
//數(shù)據(jù)塊是1-15扇區(qū)相加,每個(gè)扇區(qū)3個(gè)數(shù)據(jù)塊故3*15=45?
一個(gè)扇區(qū)不是四個(gè)數(shù)據(jù)塊嗎怎么變成三個(gè)了

第三塊單獨(dú)寫
回復(fù)

使用道具 舉報(bào)

8#
ID:964308 發(fā)表于 2021-12-1 15:53 來自手機(jī) | 只看該作者
正好有做這個(gè)的打算
回復(fù)

使用道具 舉報(bào)

9#
ID:964308 發(fā)表于 2021-12-13 00:12 | 只看該作者
domifly 發(fā)表于 2020-7-13 14:56
//數(shù)據(jù)塊是1-15扇區(qū)相加,每個(gè)扇區(qū)3個(gè)數(shù)據(jù)塊故3*15=45?
一個(gè)扇區(qū)不是四個(gè)數(shù)據(jù)塊嗎怎么變成三個(gè)了

第三塊特殊,要單獨(dú)寫入
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表