2011-01-31 101 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; 
    }