M1卡片相關(讀卡,寫卡,加密算法)

M1卡信息

  1. 一張M1卡的存儲量爲1KB( 16扇區 * 4塊 * 16字節 = 1024字節 = 1KB);
  2. 一張卡有16個扇區,每個扇區有4個塊,每個塊有16個字節的存儲量。
  3. 1字節 = 8個二進制 = 2個16進制,
    所以一個塊的存儲量爲:16個字節 = 128個二進制 = 32個16進制。
  4. 第0扇區的塊0爲廠商代碼,已經固化。
    每個扇區的塊3爲控制塊,用來存放密碼和控制權限 ,不能用來存儲數據。
    每個扇區的塊0,塊1,塊2可以用來存儲數據(扇區0的塊0除外)。
  5. 每個扇區都有獨立的密碼和存取權限(存儲在塊3)。

讀寫卡流程

  1. 上電:使用卡片前需要上電,上電成功後可獲取到卡的序列號,卡的類型等相關信息。
  2. 認證:認證需要:
    A. 選擇KeyA或者KeyB;
    B. 認證的塊;
    C. SNR序列號:即Byte數組類型的卡序列號(上電後即可獲取);
    D. KeyA或者KeyB的值(默認12個F);
  3. 讀寫塊。

讀寫卡相關

理論部分

  1. 在認證過密碼之後,可以對每個扇區的塊0,塊1,塊2進行數據存儲(扇區0的塊0除外)。每個塊能存儲32個16進制的字符。

  2. 塊3用來存儲該扇區的密碼和存儲權限。

  3. 塊3的前6個字節爲KeyA,後6個字節爲KeyB。中間的4個字節爲存儲控制。

  4. 存取控制的4個字節:
    這裏寫圖片描述

  5. 數據塊(塊0,塊1,塊2)的存取控制如下:
    (計算出C10,C20,C30即可在下表中找出塊0對應的權限)

  6. 控制塊(塊3)的存取控制如下:
    (計算出C13,C23,C33即可在下表中找出塊0對應的權限)
    這裏寫圖片描述

實踐部分

  1. 如果一個扇區的塊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後可寫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章