2011-01-31 64 views
8

我應該如何開始在C#(.NET)中編寫智能卡程序? 剛開始,我只需要知道,讀卡器(例如Omnikey) 的名稱是什麼,並打印出來。C#智能卡編程

感謝您的答案,Ales。

回答

13

前陣子我不得不寫什麼,我認爲將是一些簡單易智能卡代碼,並讓我告訴你,那是在公園裏散步。首先,事實證明,智能卡上的良好信息很難在網上找到。當我找到幾個網站的時候,關於底層的Win32 API調用和其他一些低級的東西有很多討論,這不太容易閱讀。

的事情是,他們是所謂的智能卡的一個原因。原因在於您基本上是通過向嵌入式微處理器發送它瞭解並響應的命令來與其交互。這可能會變得有點複雜,因爲許多製造商認爲實施自己的命令是一個好主意,所以很多事情都取決於您使用的卡的類型。最重要的是,有些卡看起來像智能卡,但不是真正的智能卡,甚至不使用任何「標準」智能卡接口,因此最終只能使用Windows智能卡API來啓動您的閱讀器,而智能卡閱讀器作爲他們的網站,其餘的一些不起眼的角落的.lib提供特殊的API ...

好吧,我沒有得到我的應用程序最終工作,但就像我說的,這是不容易的。無論如何,我認爲這樣做並不是很困難,因此犯了一個大錯誤。

如果你真的想進入智能卡,我認爲你最好的選擇是獲得一本關於這個主題的好書,但是因爲我也不過是一個新手,所以我真的不能幫你。

至於網站,在C#而言最有用的東西,我能挖了A Smartcard Framework for .Net。請注意,這與michaelvdnest發佈的文章不同,儘管作者是一樣的。我鏈接到的文章描述了本地智能卡API的C#包裝器,而michaelvdnest's將XML添加到了組合中,但我不知道究竟以什麼方式,因爲我還沒有閱讀它。

因此,開始解剖與文章和好運氣提供的代碼。如果內存爲我服務,讀者列舉的東西很容易找到。

3

檢查代碼項目Smart Card Framework for .NET。它描述了用於編程智能卡應用程序的.NET的XML框架。

+0

我已經完成了這一點,我仍然在努力。謝謝! :) – Thorusan86 2011-02-01 10:15:08

+0

這是由同一個人,是較新的:http://www.codeproject.com/Articles/16653/A-Smart-Card-Framework-for-NET – VoteCoffee 2014-11-07 20:37:42

1

我知道它的方式下旬.....

你可以得到一個非常容易使用,並免費供個人使用professionall庫在這裏:

http://www.smartcard-api.com/index.shtml

一旦你有了這些,你就需要開始瞭解APDU,以及如何從卡到終端來回穿梭它們。

它確實是一個巨大的議題,我有代碼將讀取標準芯片上的所有常見元素& Pin EMV卡不幸的是它是爲金融服務客戶端編寫的,所以我不能給你,我可以解釋一些你需要進行的讀取卡片。

對於其他卡片,然後它是卡片本身,例如,我有一個讀卡器和空白卡在這裏,我有一些自定義數據,只有我知道如何訪問,但我仍然有一些舊的衛星和旅行卡再次不同。

你可以得到一些想法在這裏:

How do I read the PAN from an EMV SmartCard from Java

,並有很多對一般智能卡信息的在這裏找到:

http://www.wrankl.de/SCH/SCH.html

尤其是通用的東西(其中有一些)

0

我一直在Visual Studio 2015中的應用程序工作到rea d智能卡。你想要做的是讓連接到你的電腦的智能卡讀卡器的USB設備。然後通過返回來查找您要查找的信息。雖然讀者有不少屬性,但這些是我選擇使用的。我希望這給你一個正確的方向開始:

static List<USBDeviceInfo> GetUSBDevices() 
    { 
     List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); 

     ManagementObjectCollection collection; 
     using (var searcher = new ManagementObjectSearcher(@"Select *  FROM Win32_PnPEntity where Description Like ""%Smart%card%""")) 
      collection = searcher.Get(); 
     string Device_ID = ""; 

     foreach (var device in collection) 
     { 
      devices.Add(new USBDeviceInfo(
      (string)device.GetPropertyValue("DeviceID"), 
      (string)device.GetPropertyValue("PNPDeviceID"), 
      (string)device.GetPropertyValue("Name"), 
      (string)device.GetPropertyValue("Description"), 
      (string)device.GetPropertyValue("Status"))); 


      Device_ID = (string)device.GetPropertyValue("DeviceID"); 

     } 

     collection.Dispose(); 
     return devices; 
    }