1. 程式人生 > >[開源]使用C# 對CPU卡基本操作封裝

[開源]使用C# 對CPU卡基本操作封裝

bubuko 廣告 說明 byte 完成 記錄日誌 介紹 http tps

Github 地址:https://github.com/zifeiniu/CPUCardLib

項目需求及簡介:

公司要求將用戶相關的信息儲存到射頻卡中,之前項目使用的Mifare類型卡,只儲存了用戶的卡ID。Mifare S70容量也不夠,遂使用CPU卡,FM1280,可達80KB的EEROM存儲。
在CSDN上花積分下載了一個C#讀取CPU卡的Demo,惡心的是不僅沒有源碼,而且互操作調用封裝的DLL,還指定使用他們的讀卡器,打廣告還帶賺我積分的。。
然後自己寫了一個,開源一下,供大家改改。。
時間緊迫,從不懂,到寫完這個也就兩星期,等有空了繼續寫個讀公交卡和銀行卡。。。

介紹

已實現兩種設備的接口
Pcsc,使用CAR122U讀卡器(PcscCardReader)(https://github.com/danm-de/pcsc-sharp),只要實現PCSC驅動讀卡器都可以使用。

德卡D3D8 讀卡器 DeCardReader。
添加新讀卡器,只需要實現接口ICPUCardReader即可。接口很簡單,只要實現發送byte[],返回byte[]即可。

CpuCard類封常用操作命令。

目前只實現外部身份驗證,沒寫秘鑰操作相關。
創建二進制文件,寫入文件,讀取文件,記錄日誌等。

遇到的坑

最大二進制文件:

文檔沒有說明二進制文件最大可用多少大。創建一個大的二進制文件時沒有報錯,但是寫入時報錯。
檢查文檔:當P1 參數的最高位不為1時,P1 P2 為欲寫入的文件偏移量,也就是說最大偏移量為7FFF,32767個字節,使用Unicode編碼,最多可寫16383個漢字

硬件資源釋放問題:

像這種硬件讀取完成的時候不知道什麽時候釋放資源合適,每次發送命令的時候打開,發送完成後關閉,這樣不曉得慢是肯定了,而且可能會減少硬件壽命。
所以在設備層發送命令後不關閉,在卡操作業務層關閉。當下次發送命令時,自動檢測設備未打開,則打開設備。

讀取二進制文件問題:

因為寫入的可以指定二進制文件的長度,但是讀取二進制文件的時候,沒找到如何獲取二進制文件的長度。

發現讀取會有提示如下
6Cxx 出錯 Le長度錯誤,實際長度是xx。
則讀取碰到6C後,修正此次讀取數據長度,繼續讀取。

參考文件:

FMCOS專用技術手冊 (使用復旦微電子的卡)

測試設備型號

ACR122U 德卡D8(即將實現)

測試CPU卡型號:

FM1216-137 FM1280

未實現功能

時間緊迫,目前沒用使用加密,線路保護功能。
技術分享圖片

[開源]使用C# 對CPU卡基本操作封裝