M1卡信息
- 一張M1卡的存儲量爲1KB( 16扇區 * 4塊 * 16字節 = 1024字節 = 1KB);
- 一張卡有16個扇區,每個扇區有4個塊,每個塊有16個字節的存儲量。
- 1字節 = 8個二進制 = 2個16進制,
所以一個塊的存儲量爲:16個字節 = 128個二進制 = 32個16進制。 - 第0扇區的塊0爲廠商代碼,已經固化。
每個扇區的塊3爲控制塊,用來存放密碼和控制權限 ,不能用來存儲數據。
每個扇區的塊0,塊1,塊2可以用來存儲數據(扇區0的塊0除外)。 - 每個扇區都有獨立的密碼和存取權限(存儲在塊3)。
讀寫卡流程
- 上電:使用卡片前需要上電,上電成功後可獲取到卡的序列號,卡的類型等相關信息。
- 認證:認證需要:
A. 選擇KeyA或者KeyB;
B. 認證的塊;
C. SNR序列號:即Byte數組類型的卡序列號(上電後即可獲取);
D. KeyA或者KeyB的值(默認12個F); - 讀寫塊。
讀寫卡相關
理論部分
-
在認證過密碼之後,可以對每個扇區的塊0,塊1,塊2進行數據存儲(扇區0的塊0除外)。每個塊能存儲32個16進制的字符。
-
塊3用來存儲該扇區的密碼和存儲權限。
-
塊3的前6個字節爲KeyA,後6個字節爲KeyB。中間的4個字節爲存儲控制。
-
存取控制的4個字節:
-
數據塊(塊0,塊1,塊2)的存取控制如下:
(計算出C10,C20,C30即可在下表中找出塊0對應的權限)
-
控制塊(塊3)的存取控制如下:
(計算出C13,C23,C33即可在下表中找出塊0對應的權限)
實踐部分
- 如果一個扇區的塊3的存儲控制字節爲: 08 77 8F 69
- 轉爲二進制即
6:0 0 0 0 1 0 0 0
7:0 1 1 1 0 1 1 1
8:1 0 0 0 1 1 1 1
字節9爲備用字節,可忽略。 - 參照理論部分第4條,字節6全部取反, 字節7的低4位取反,得到:
C2Y:1111 C1Y:0111
C1Y:0111 C3Y:1000
C3Y:1000 C2Y:1111
對應塊:3210 對應塊:3210 - 高4位的各塊值=低4位的各塊值時,其值可用。高4位值≠低4位值時,其值不可用!
- C10 C20 C30 = C1Y C2Y C3Y = 1 1 0
所以塊0的權限爲:驗證KeyA或者KeyB可讀,可減值,可初始化,驗證KeyB後可寫,可加值。
C13 C23 C33 = C1Y C2Y C3Y = 0 1 1
所以塊3的權限爲:驗證KeyA或者KeyB可讀,驗證KeyB後可寫
所以扇區KeyA的權限爲:KeyA 不可讀,驗證KeyB後可寫
所以扇區KeyB的權限爲:KeyB 不可讀,驗證KeyB後可寫