久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5855|回復(fù): 8
收起左側(cè)

STM32 RFID-RC522修改卡的密碼?求指教

[復(fù)制鏈接]
ID:511461 發(fā)表于 2019-10-19 15:45 | 顯示全部樓層 |閱讀模式
      近期,在RFID-RC522模塊,能夠讀取卡的ID,也會向卡讀寫數(shù)據(jù),但關(guān)于修改密碼方面,不是很懂,希望大神能指教一番。


#include "stm32f10x.h"
#include "bsp_SysTick.h"
#include "bsp_usart1.h"
#include "rc522_config.h"
#include "rc522_function.h"
#include <stdbool.h>
#include "bsp_lcd.h"



void IC_test ( void )
{
        char cStr [ 30 ];
  u8 ucArray_ID [ 4 ];                                                                                             //先后存放IC卡的類型和UID(IC卡序列號)
        u8 ucStatusReturn;                                                                                               //返回狀態(tài)
  static u8 ucLineCount = 0;
               
  while ( 1 )
  {
                if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK )                                    //尋卡
                        ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID );                                                                 //若失敗再次尋卡

                if ( ucStatusReturn == MI_OK  )
                {
                        if ( PcdAnticoll ( ucArray_ID ) == MI_OK )                                                                   //防沖撞(當(dāng)有多張卡進(jìn)入讀寫器操作范圍時(shí),防沖突機(jī)制會從其中選擇一張進(jìn)行操作)
                        {
                                sprintf ( cStr, "The Card ID is: %02X%02X%02X%02X", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] );                                
                                printf ( "%s\r\n",cStr );
                                ucLineCount ++;
                                
                                if ( ucLineCount == 17 ) ucLineCount = 0;                                                               
                        }                        
                }
  }        
}




/**
  * @brief  主函數(shù)
  * @param  無
  * @retval 無
  */
int main ( void )
{
        SysTick_Init ();   //滴答時(shí)鐘初始化
        
        USART1_Config ();  //USART1 配置模式為 115200 8-N-1,中斷接收
        
        RC522_Init ();     //RC522模塊所需外設(shè)的初始化配置

        printf ( "WF-RC522 Test\n" );
               
        PcdReset ();
        M500PcdConfigISOType ( 'A' );//設(shè)置工作方式
        
        
  while ( 1 )
  {
    IC_test ();//IC卡檢測        
                //printf ( "11111111111");
  }        
}

讀卡器stm32RCT6.7z

210.6 KB, 下載次數(shù): 39

回復(fù)

使用道具 舉報(bào)

ID:174087 發(fā)表于 2019-10-21 17:16 | 顯示全部樓層
S50卡的密碼存放在每個(gè)扇區(qū)的第三塊,想要修改扇區(qū)密碼要先確保KEYA和KEYB是默認(rèn)的,然后使用默認(rèn)密碼去進(jìn)行讀寫,讀寫操作步驟和向卡寫數(shù)據(jù)的步驟是一樣的,需要先驗(yàn)證密碼,注意不要修改到密碼控制字節(jié),否則可能將該扇區(qū)鎖死
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-10-21 22:19 | 顯示全部樓層
有兩個(gè)密碼,分別是密碼A和密碼B,根據(jù)第3塊的存取控制能夠?qū)γ艽aA或密碼B進(jìn)行修改,但不是任何一個(gè)存取控制都能修改密碼,如C13 C23 C33為010 110 101 111 不能修改密碼A和密碼B  
回復(fù)

使用道具 舉報(bào)

ID:511461 發(fā)表于 2019-10-23 19:09 | 顯示全部樓層
修改密碼的我會了,但是我發(fā)現(xiàn)我修改了A的密碼,比如說改為存在NEWKEY數(shù)組里,但是此時(shí)我的B的密碼就不是他之前的密碼了,我也不知道改為啥了,試了A的新密碼也不對
回復(fù)

使用道具 舉報(bào)

ID:511461 發(fā)表于 2019-10-23 19:11 | 顯示全部樓層
但是我改完B的密碼,存在NEWKEYB數(shù)組里,此時(shí)A的密碼也變了,也不是之前的了,變成B的新密碼了,
嗯。。,我說的比較繞,但就是這個(gè)意思,希望有大佬幫忙解決一下
回復(fù)

使用道具 舉報(bào)

ID:174087 發(fā)表于 2019-10-24 11:49 | 顯示全部樓層
aaaaaa。 發(fā)表于 2019-10-23 19:09
修改密碼的我會了,但是我發(fā)現(xiàn)我修改了A的密碼,比如說改為存在NEWKEY數(shù)組里,但是此時(shí)我的B的密碼就不是他 ...

你用來存放密碼的數(shù)組多大的,修改密碼時(shí)必須是密碼A密碼B控制字全部寫進(jìn)去,也就是你的數(shù)組格式應(yīng)該是【新的密碼A控制字新的密碼B】,這樣寫進(jìn)去才會是你想要的密碼,不然的話另一個(gè)密碼就是0或者亂碼
回復(fù)

使用道具 舉報(bào)

ID:511461 發(fā)表于 2019-10-24 13:01 | 顯示全部樓層
這是總的程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "rc522_function.h"
#include "rc522_config.h"


//u8 KEYA[6]={8,8,8,8,8,8};   //管理員卡秘鑰A (管理員權(quán)限)
//u8 KEYB[6]={6,5,4,3,2,1};   //管理員卡秘鑰B (管理員權(quán)限)
u8 KEYA[6]={0xff,0xff,0xff,0xff,0xff,0xff};

u8 NEWKEYA[6]={1,2,3,4,5,6};
u8 NEWKEYB[6]={0x11,0x22,0x33,0x44,0x55,0x66};
u8 NEW[6]={0x66,0x55,0x44,0x33,0x22,0x11};
u8 KEYB[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u8 writedata[6]={0x11,0x26,0x11,0x28};
u8 ucArray_ID [ 4 ];
u8 pdataread[10];



int KEYA_in(int block)//選定卡片并輸出密碼A,///輸入卡片塊地址(0-63)
{
        u8 pan,bat,cad;
        PcdSelect(ucArray_ID);//選定卡片
        pan=0;
        printf("正在輸入密碼..............\r\n");
        pan=PcdAuthState(0x60, block ,NEWKEYB,ucArray_ID);//輸入密碼
        if(pan==0x26)
        {
                printf("密碼正確\r\n");
          //PcdWrite(block+1,NEWKEYB);                return 1;
        }
        else
        {
                printf("密碼錯誤\r\n");
                return 0;
        }
}

void KEYB_in(int block)//選定卡片并輸出密碼A,///輸入卡片塊地址(0-63)
{
        int t=0;
        u8 pan;
        PcdSelect(ucArray_ID);//選定卡片
        t=0;
        pan=0;
        printf("正在輸入密碼..............\r\n");
        while(t<5&&pan!=0x26)
        {
                t++;
                pan=PcdAuthState(0x61, block ,NEWKEYB,ucArray_ID);//輸入密碼
        }
        if(pan==0x26)
        {
                printf("SUCCESS\r\n");
                //PcdWrite(block+1,NEWKEYB);
        }
        else
        {
                printf("FAIL\r\n");
        }
}


void write_kuai(int address,u8 * pdata)//在一個(gè)塊寫數(shù)據(jù)
{
        u8 pan=0;
        printf("正在對塊%d寫入數(shù)據(jù)..............\r\n",address);       
        pan=PcdWrite(address,pdata);
        if(pan==0x26)
        {
                printf("寫入成功\r\n");
        }
        else
        {
                printf("寫入失敗\r\n");
        }
}


void read_kuai(int address)//讀出數(shù)據(jù)塊并打印數(shù)據(jù)到串口
{
        u8 pan=0;
        char num[10];
        //u8 unum[10];
        printf("正在對扇區(qū)%d讀取數(shù)據(jù)..............\r\n",address);       
        pan=PcdRead(address,pdataread);
        sprintf (num,"%2X%2X%2X%2X",pdataread [ 0 ],pdataread [ 1 ],pdataread [ 2 ],pdataread [ 3 ]);
        //unum[0]=num[0];unum[1]=num[1];unum[2]=num[2];unum[3]=num[3];unum[4]=num[4];unum[5]=num[5];unum[6]=num[6];unum[7]=num[7];
        if(pan==0x26)
        {
                printf("讀取成功\r\n數(shù)據(jù)為%s\r\n",num);
        }
        else
        {
                printf("讀取失敗\r\n");
        }
}

u8 IC_test ( void )
{
        char cStr [ 30 ];
  //u8 ucArray_ID [ 4 ];                                                                                             //先后存放IC卡的類型和UID(IC卡序列號)
        u8 ucStatusReturn;                                                                                               //返回狀態(tài)
  static u8 ucLineCount = 0;
               
  while ( 1 )
  {
                if( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK )       //尋卡
                {
                        ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID );                                  //若失敗再次尋卡
                }
                if ( ucStatusReturn == MI_OK  )
                {
                        if ( PcdAnticoll ( ucArray_ID ) == MI_OK )         //防沖撞(當(dāng)有多張卡進(jìn)入讀寫器操作范圍時(shí),防沖突機(jī)制會從其中選擇一張進(jìn)行操作)
                        {
                                sprintf ( cStr, "The Card ID is: %02X%02X%02X%02X", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] );
                                                               
                                printf ( "%s\r\n",cStr );                                
                                ucLineCount ++;                               
                                if ( ucLineCount == 17 ) ucLineCount = 0;       
        return 1;                               
                        }                       
                }               
  }       
}

int main(void)
{
   u8 flag=0;
        delay_init();                     //延時(shí)函數(shù)初始化          
        uart_init(115200);                 //串口初始化為9600
        LED_Init();                                  //初始化與LED連接的硬件接口
        //LCD_Init();
       
        RC522_Init ();     //RC522模塊所需外設(shè)的初始化配置         

        printf ( "WF-RC522 Test\r\n" );
               
        PcdReset ();
        M500PcdConfigISOType ( 'A' );//設(shè)置工作方式
        while(1)
        {
                 flag=IC_test ();
     if(flag==1)//IC卡檢測,返回UID
                 {
                         flag=0;
                         KEYA_in(26);
                         //KEYB_in(26);
//                         write_kuai(1,writedata);
//                         read_kuai(1);
                 }       
                 LED0=!LED0;         
                 delay_ms(1000);       
        }
}

以下只是修改密碼那部分的內(nèi)容
u8 KEYA[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u8 NEWKEYA[6]={1,2,3,4,5,6};
u8 NEWKEYB[6]={0x11,0x22,0x33,0x44,0x55,0x66};
u8 KEYB[6]={0xff,0xff,0xff,0xff,0xff,0xff};

int KEYA_in(int block)//選定卡片并輸出密碼A,///輸入卡片塊地址(0-63)
{
        u8 pan,bat,cad;
        PcdSelect(ucArray_ID);//選定卡片
        pan=0;
        printf("正在輸入密碼..............\r\n");
        pan=PcdAuthState(0x60, block ,NEWKEYB,ucArray_ID);//輸入密碼
        if(pan==0x26)
        {
                printf("密碼正確\r\n");
          //PcdWrite(block+1,NEWKEYB);                return 1;
        }
        else
        {
                printf("密碼錯誤\r\n");
                return 0;
        }
}

KEYA_in(6);   // 修改的是第二扇區(qū)的密碼,也就是對數(shù)據(jù)塊7進(jìn)行修改,修改密碼的數(shù)組長度為6,里面存儲著A的新密碼,
大佬,那你的意思是不是如果要修改密碼,就定義一個(gè)長度為16的數(shù)組,其中A占前六個(gè),中間4個(gè)為控制字,后6個(gè)是B的新密碼,是不是這樣子呢??如果是的話,那在修改密碼前,進(jìn)行驗(yàn)證的時(shí)候,是不是A和B的原密碼都要驗(yàn)證呢??是先A后B,還是和修改時(shí)一樣,定義長度為16的數(shù)組,一起驗(yàn)證


回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-10-24 13:03 | 顯示全部樓層
woshige 發(fā)表于 2019-10-24 11:49
你用來存放密碼的數(shù)組多大的,修改密碼時(shí)必須是密碼A密碼B控制字全部寫進(jìn)去,也就是你的數(shù)組格式應(yīng)該是【 ...

建立16個(gè)元素的數(shù)組,A密碼存在0-5 控制字存在6-9,B密碼存在10-15,修改A密碼時(shí),第6-15的元素不能改,然后整個(gè)數(shù)組寫入某扇區(qū)的第3塊即可
回復(fù)

使用道具 舉報(bào)

ID:511461 發(fā)表于 2019-10-24 20:15 | 顯示全部樓層
csmyldl 發(fā)表于 2019-10-24 13:03
建立16個(gè)元素的數(shù)組,A密碼存在0-5 控制字存在6-9,B密碼存在10-15,修改A密碼時(shí),第6-15的元素不能改,然后整 ...

那修改之前還要進(jìn)行驗(yàn)證的吧,驗(yàn)證的時(shí)候要對A和B扇區(qū)都要驗(yàn)證嗎
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲不卡在线观看 | 国产精品久久久久久久久久了 | 成人免费观看男女羞羞视频 | 一区精品国产欧美在线 | 久久看精品 | 色综网| 免费看a | 国产一区久久 | 欧美一区在线视频 | 日韩中文av在线 | 欧美精品一区在线发布 | 久久久久久久国产 | 国产主播第一页 | 黄网站色大毛片 | 欧美日韩不卡在线 | 天天干成人网 | 四虎影院久久 | 久久久久久中文字幕 | 蜜桃精品视频在线 | 亚洲交性| 黄色国产| 国内精品久久久久 | 在线观看www高清视频 | 国产高清亚洲 | 性欧美精品一区二区三区在线播放 | 久久国产精品网 | 精品视频在线免费观看 | 国产综合久久 | 欧洲国产精品视频 | 国产精品一区二区无线 | 粉色午夜视频 | 国产一二三区免费视频 | 日韩精品一区二区久久 | 中文字幕在线免费视频 | 国产精品久久久久影院色老大 | 亚洲一区二区免费电影 | 亚洲国产免费 | 九九热最新视频 | 一区二区不卡视频 | 亚洲有码转帖 | 99re视频这里只有精品 |