在c#中使用WinSCard API读/写SLE4442存储卡

一些背景资料:

为了读/写SLE4442存储卡,我的应用程序目前正在使用Omnikey Cardman 3021 USB读卡器,一个Sumbsembly智能卡API(外部dll),能够包装CT-API调用(指向omnikey的dll),这样我就可以在我的c#app中读/写存储卡。 这里唯一的问题是Omnikey只提供了32位的CT-API。 我问他们是否要生产64位版本,但是他们不会被打扰。

现在的情况:

为了使我的应用程序具有64位function,我必须使用Windows WinSCard API重写它。 这里的问题是网上没有具体的例子如何做到这一点。 获取工作的APDU命令几乎是不可能的,但我已经设法获得了两个略有不同的版本。 几个月来我用Google搜索了这一百次,并且我已经设法吞噬了一起,我终于可以阅读SLE4442存储卡了。 但对于我的生活,我无法写作。

代码:

我不打算将整个代码发布到第一篇文章中(如果需要,我可以稍后再做,或提供源代码的链接)。 但我将概述基本步骤。

1)SCardEstablishContext

2)通过SCardListReaders获取读者姓名

3)SCardConnect

4)用SCardTransmit和APDU新字节[] {0xFF,0xB0,0,0,0}读取整个存储器;

5)用SCardTransmitvalidation引脚和APDU新字节[] {0xFF,0x20,0,0,3,0,0FF,0xFF,0xFF}; (注意,这确实返回0x90; 0x00作为响应,这意味着validation应该是成功的)

6)尝试用ScardTransmit和APDU写新的byte [] {0xFF,0xD6,0,0,50,1}; (尝试在内存位置50写入值1) – 我也尝试使用APDU,第一个参数是0x00和/或第二个字节是0xD0。 响应从未是0x90; 0x00因此我假设在写入期间出现错误,但我无法找到返回的错误代码的任何含义。

可能的原因:

因为我可以使用WinSCard API读取存储卡,所以必须也可以写入一个(侧面注释 – 我尝试写入的存储卡处于工作状态,我没有将它们锁定未能validationPIN码3次)。

1)也许写APDU命令是错误的。 可能是指令字节(第二个字节)不正确,或者存储器位置使用某种扩展编码方案。

2)也许validation命令实际上没有validation。 因为在命令本身很好,这就是为什么返回0x90,但我必须先调用或设置一些东西。

3)只是预感,但我认为这是真正的罪魁祸首。 谷歌搜索时,我确实发现一些模糊的引用,必须使用参数IOCTL_SMARTCARD_SET_CARD_TYPE调用SCardControl方法并将卡类型设置为SLE4442。 但是,在任何地方都没有任何工作示例,我的试错法测试导致了失败。 我得到“无法正确解释一个或多个提供的参数。” 还有一些其他错误信息,不记得它们都是什么。 假设我从谷歌代码中复制粘贴的代码具有错误代码的正确描述。

我需要的:

我需要的是有人发布或指导我使用WinSCard API读取/写入SLE4442的c#中具有完整+工作代码的站点,它必须在32位和64位环境中工作。 代码不一定是万无一失的 – 例如。 很好地处理每个可能的错误情况。 我应该能够自己做到这一点。 但如果是(包括APDU命令结果描述 – 例如.0x90; 0x00是成功,但0x6B; 0x4D是……等……)则更好。

在您的示例中,用于写入卡的APDU应为:

FF D6 00 50 01 01 

我们的Omnikey(3121)终端完美地在SLE4442 / SLE4442卡上写入数据,试试这个APDU:FF D6 00 04 10 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E AA参见: http : //acs.com .hk / drivers / eng / API_ACR122U.pdf ,第5.4章

FF,D2,00,01,03,01,02,03(新引脚= 1,2,3)不起作用(也在validation现有PIN后:6D,00,FF,20,00,00 03,FF, FF,FF) – 返回错误代码6D00。

对于我们(还)不是一个大问题,因为我们现在使用Xiring XiMax终端(具有自己的SDK的可编程终端)对我们的卡进行编码,终端可以将数据存储在闪存中。 但是,我们需要尽快找到解决方案。 我对你(未来)的发现很感兴趣。 你有Omnikey SDK吗? 我们可以向您发送C ++中的工作示例,这些示例可以更改SLE4442 / 5542卡上的PSC(引脚)和数据。

本周(所以不是明天,如前所述,我们有许多事情正在进行并且不断进行)我们将使用Omnikey 1021测试(到目前为止)工作代码。 希望能帮到你。

我们总有50多个Omnikey 3121读卡器现货供应,我们可以为您提供这些(1+)以获得更高的电池价格。 如果您有兴趣,请告诉我。 我也很感兴趣您所在的位置以及您正在开发的应用程序。