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,最後一個塊的記憶體結構如下:
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 密碼A(6位元組) 存取控制(4位元組) 密碼B(6位元組) |
每個扇區的密碼和存取控制都是獨立的,可以根據實際需要設定各自的密碼及存取控制;
存取控制為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_py2和py3讀寫文本區別
nbsp 編碼格式 需要 指定 nic 解碼 py3 bytes 寫入文件 python2和python3的區別? python 2 str 對應 python3 bytes python 2 uincod
[Linux流操作]使用gets和puts讀寫流
linux流//使用fgets從標準輸入讀入一行數據 //然後使用fputs送標準輸出顯示 #include <stdio.h> #include <stdlib.h> #define MAXLINE 4096 //定義一行的最大字符長度 int main(int argc,
fread和fwrite和feof讀寫二進制文件
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開發紀事之流式xml和json讀寫
每次完成一個任務的時候,都要看看有沒有什麼潛在的可以把功能是現成庫的地方。這十分有利於提高自己的水平。但至於你寫出來的庫會不會有人用,那是另一回事情了。 這次為了完成一個多程式語言+多自然語言的文件編寫工具,不得不做一個可以一次生成一大批文字檔案的模板結構出來。有了模板必然有元資
關於dicom引數資訊和資料讀寫的理解
1. 資料位儲存(DCM_BitsStored)、資料位分配(DCM_BitsAllocated)、資料符號型別(DCM_PixelRepresentation)、灰度偏移(DCM_RescaleIntercept) 和資料值(DCM_PixelData)本身的關係:
WIN10應用程式自啟動功能及InstallShield讀寫64位系統登錄檔相關問題的解決
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
ofstream和ifstream 讀寫檔案
#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++的ifstream和ofstream讀寫類物件
#include <iostream> #include <fstream> #include <string> using namespace std; class Student { public: //有元宣告最後放在publi