Github 地址:github.com/zifeiniu/CPUCardLib
項目需求及簡介:
公司要求將使用者相關的資訊儲存到射頻卡中,之前項目使用的Mifare類型卡,只儲存了使用者的卡ID。Mifare S70容量也不夠,遂使用CPU卡,FM1280,可達80KB的EEROM儲存。
在CSDN上花積分下載了一個C#讀取CPU卡的Demo,噁心的是不僅沒有源碼,而且互操作調用封裝的DLL,還指定使用他們的讀卡機,打廣告還帶賺我積分的。。
然後自己寫了一個,開源一下,供大家改改。。
時間緊迫,從不懂,到寫完這個也就兩星期,等有空了繼續寫個讀公交卡和銀行卡。。。
介紹
已實現兩種裝置的介面
Pcsc,使用CAR122U讀卡機(PcscCardReader)(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
未實現功能
時間緊迫,目前沒用使用加密,線路保護功能。