1. 程式人生 > >RFID的KeyA/KeyB和區讀寫控制位

RFID的KeyA/KeyB和區讀寫控制位

MifareClassic的射頻卡,一般記憶體大小有3種:

1K: 16個分割槽(sector),每個分割槽4個塊(block),每個塊(block) 16個byte資料

2K: 32個分割槽,每個分割槽4個塊(block),每個塊(block) 16個byte資料

4K:64個分割槽,每個分割槽4個塊(block),每個塊(block) 16個byte資料

對於所有基於MifareClassic的卡來說,每個區最後一個塊叫Trailer,16個byte, 主要來存放讀寫該區的key,可以有A,B兩個KEY,每個key長6byte,預設的key一般是FF 或 0,最後一個塊的記憶體結構如下:

Block 0  Data 16bytes Block 1  Data 16 bytes Block 2  Data 16 bytes Block 3  Trailer 16 bytes Trailer: Key A: 6 bytes Access Conditions: 4 bytes Key B: 6 bytes

M1卡分為16個扇區,每個扇區由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個扇區的64個塊按絕對地址編號為0~63,)存貯結構如右表所示

0

0

資料塊

0

1

資料塊

1

2

資料塊

2

3

密碼A  存取控制    密碼B

資料塊

3

1

0

資料塊

4

1

資料塊

5

2

資料塊

6

3

密碼A  存取控制    密碼B

資料塊

7


15

0

資料塊

60

1

資料塊

61

2

資料塊

62

3

密碼A  存取控制    密碼B

資料塊

63

0扇區的塊0(即絕對地址0塊),它用於存放廠商程式碼,已經固化,不可更改。

每個扇區的塊0、塊1、塊2為資料塊,可用於存貯資料。

每個扇區的塊3為控制塊,包括了密碼A、存取控制、密碼B。具體結構如下:

A1A2 A3 A4 A5               FF 07 8069               B0 B1 B2 B3 B4 B5

密碼A6位元組)          存取控制(4位元組)          密碼B6位元組) 

每個扇區的密碼和存取控制都是獨立的,可以根據實際需要設定各自的密碼及存取控制;

存取控制為4個位元組,共32位,扇區中的每個塊(包括資料塊和控制塊)的存取條件是由密碼和存取控制共同決定的。

飛利浦原裝的MF1 S50卡的密碼A為12個“F”,密碼B為12個“F”,前15個扇區的控制位為“FF078069”,最後1個扇區的控制位是“FF0780BC”。

    但目前有些晶片的密碼不一定與上面一樣。以前,ISSI的MF1相容晶片的密碼B為“B0B1B2B3BB5”,現在改成12個“F”沒有就沒深入瞭解了。


工作原理:

讀寫器向M1卡發一組固定頻率的電磁波,卡片內有一個LC串聯諧振電路,其頻率與訊寫器發射的頻率相同,在電磁波的激勵下,LC諧振電路產生共振,從而使電容內有了電荷,在這個電容的另一端,接有一個單向導通的電子泵,將電容內的電荷送到另一個電容內儲存,當所積累的電荷達到2V時,此電容可做為電源為其它電路提供工作電壓,將卡內資料發射出去或接取讀寫器的資料。

密碼的驗證是在卡內部進行的,讀寫器只負責給卡提供電並和卡通訊,讀寫器傳送加密的密碼到卡,卡內部進行解密驗證併發返回值,讀寫器根據卡的返回值來判斷驗證是否通過.
每個區中的控制塊決定驗證密碼通過後能進行的操作.如果控制塊中已將某區鎖死,即使密碼驗證通過也讀寫不了卡中的資料.預設的控制塊資料是無論那個密碼驗 證通過,都可讀寫區中的資料,KeyA是永遠不可讀的,KeyB在預設控制塊的情況下,可以讀,條件是密碼必須驗證通過.

相關推薦

RFID的KeyA/KeyB控制

MifareClassic的射頻卡,一般記憶體大小有3種: 1K: 16個分割槽(sector),每個分割槽4個塊(block),每個塊(block) 16個byte資料 2K: 32個分割槽,每個分割槽4個塊(block),每個塊(block) 16個byte資料

I2C關於控制

*1、I2C協議簡介* 2、空閒開始/應答/結束訊號 2.1空閒 I2C匯流排匯流排的SDA和SCL兩條訊號線同時處於高電平時,規定為匯流排的空閒狀態。此時各個器件的輸出級場效電晶體均處在截止狀態,即釋放匯流排,由兩條訊號線各自的上拉電阻把電平拉

STM32的RFID射頻控制裝置

please include .cn mage str rfid alt all float ,大二上學期做的,過了很久,先上一下圖: 這並不是做個最後一版;主體是RC552+STM32+1062;蜂鳴器,繼電器,LED等;反正最後的效果就是,刷一下卡,1602顯示一下持

python_py2py3文本區別

nbsp 編碼格式 需要 指定 nic 解碼 py3 bytes 寫入文件 python2和python3的區別? python 2 str    對應 python3 bytes python 2 uincod

[Linux流操作]使用getsputs

linux流//使用fgets從標準輸入讀入一行數據 //然後使用fputs送標準輸出顯示 #include <stdio.h> #include <stdlib.h> #define MAXLINE 4096 //定義一行的最大字符長度 int main(int argc,

freadfwritefeof二進制文件

name std 文本文件 數據 () write void tdi post #include <stdio.h> #include <stdlib.h> void text_to_bin(char *argv[]); void bin_to_

030:Cetus中間件MHA分離

sample ignore 分離 dir sse binary 順序 cpu tar zxvf 030:Cetus中間件和MHA讀寫分離 一、主機環境 虛擬機配置 CPU 內存 硬盤 OS版本 MySQL版本 MHA版本 Cetus版本 2-core 4

一步一步實現STM32-FOTA系列教程之FLASH靜態

一步一步實現STM32-FOTA系列教程之FLASH靜態區讀寫 文章系列連結 《一步一步實現STM32-FOTA系列教程之bin檔案生成》 《一步一步實現STM32-FOTA系列教程之STM32-FLASH分割槽說明》 前言 在上一篇文章《一步一步實現STM32-FO

Android開發(2):資料儲存之一:SharedPrefrences檔案

一、資料儲存 本文主要講前兩種儲存方式,其中檔案讀寫只記錄Internal Storage方式 1. SharedPrefrences方式 輕量級NVP方式儲存,以XML的檔案方式儲存,適合少量資料的儲存。 NVP:Name/Value pair, 名稱/值 對。 2.

java的IO流檔案

IO流 IO流分類 按資料流向分:輸入流、輸出流 按資料型別分:位元組流(x xInputStream 讀,xxOutputStream寫)、字元流(xxRead讀,xxWrite寫) 如果資料所在的檔案通過windows自帶的記事本開啟並能

Vczh Library++3.0開發紀事之流式xmljson

    每次完成一個任務的時候,都要看看有沒有什麼潛在的可以把功能是現成庫的地方。這十分有利於提高自己的水平。但至於你寫出來的庫會不會有人用,那是另一回事情了。     這次為了完成一個多程式語言+多自然語言的文件編寫工具,不得不做一個可以一次生成一大批文字檔案的模板結構出來。有了模板必然有元資

關於dicom引數資訊資料的理解

1. 資料位儲存(DCM_BitsStored)、資料位分配(DCM_BitsAllocated)、資料符號型別(DCM_PixelRepresentation)、灰度偏移(DCM_RescaleIntercept) 和資料值(DCM_PixelData)本身的關係:  

WIN10應用程式自啟動功能及InstallShield64系統登錄檔相關問題的解決

1. 問題:應用程式需要隨系統啟動,同時該應用程式也需要獲得管理員許可權才可以執行,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run位置,設定了相關啟動項,發現無法隨機啟動。發現,若應用程式不獲

(原創)python的字串二進位制

python的文字讀寫和二進位制讀寫 筆者在之前的文件裡面提出過,scrapy框架本身存在大檔案下載的問題,因此產生了改造scrapy的想法,這裡在修改下載模組(FilesPipeline)的時候遇到了文字讀寫和二進位制讀寫的問題。 (scrapy具

C# 判斷檔案是否存在檔案

一、檔案是否存在 c#中操作IO非常簡單,下面介紹如何判斷資料夾或檔案是否存在的方法。  程式碼如下: //判斷資料夾是否存在,不存在則建立資料夾 if (!System.IO.Directory.Exists(@"E:\Files")) {    System.IO.D

ofstreamifstream 檔案

#include <iostream> using namespace std; #include <fstream> void main() {

Python多執行緒同步---檔案控制

1、實現檔案讀寫的檔案ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes():

Python字符集編碼檔案

字串編碼python中預設編碼是ASCII,可以通過以下方式設定和獲取:import sysprint sys.getdefaultencoding()sys.setdefaultencoding('gbk') 但直到python重新啟動後新的預設編碼才會生效,我試了一下,s

Python學習第三天(元組檔案

元組 元組和列表差不多,也是存一組數,但是元組一旦建立便不能在修改 只有兩個方法:count 和index 從語法上講:編寫在圓括號中    在程式碼的首行加入:#-*-coding:utf-8-*-   可以輸入中文字 ————————

c++的ifstreamofstream類物件

#include <iostream> #include <fstream> #include <string> using namespace std; class Student { public: //有元宣告最後放在publi