为了读/写SLE4442存储卡,我的应用程序目前正在使用Omnikey Cardman 3021 USB读卡器,一个Sumbsembly智能卡API(外部dll),它能够包装CT-API调用(指向omnikey的dll),所以我可以在我的c#app中读/写存储卡。 这里唯一的问题是Omnikey只提供了32位的CT-API。我问他们是否要生产64位版本,但是他们不会被打扰。
为了使我的应用程序具有64位功能,我必须使用Windows WinSCard API重写它。这里的问题是网上没有具体的例子如何做到这一点。获取工作的APDU命令几乎是不可能的,但我已经设法获得了两个略有不同的版本。 几个月来我用谷歌搜索了一百遍,并且我已经设法吞噬了一起,我终于可以阅读SLE4442存储卡了。但是对于我的生活,我无法写作。
我不打算将整个代码发布到第一篇文章中(如果需要,我可以在以后发布或提供源代码的链接)。 但我将概述基本步骤。
1)SCardEstablishContext
2)通过SCardListReaders获取读者姓名
3)SCardConnect
4)用SCardTransmit和APDU新字节[] {0xFF,0xB0,0,0,0}读取整个存储器;
5)用SCardTransmit验证引脚和APDU新字节[] {0xFF,0x20,0,0,3,0,0FF,0xFF,0xFF}; (注意,这确实返回0x90; 0x00作为响应,这意味着验证应该是成功的)
6)尝试使用ScardTransmit和APDU写入新的byte [] {0xFF,0xD6,0,0,50,1}; (尝试在内存位置50写入值1) - 我也尝试使用APDU,第一个参数是0x00和/或第二个字节是0xD0。响应从未是0x90; 0x00因此我假设在写入期间出现错误,但我无法找到返回的错误代码的任何含义。
因为我可以使用WinSCard API读取存储卡,所以必须也可以写入一个(侧面注释 - 我尝试写入的存储卡处于工作状态,我没有由于未能验证PIN码3次而将其锁定。
1)可能写入APDU命令错误。可能是指令字节(第二个字节)不正确,或者内存位置使用某种扩展编码方案。
2)也许验证命令实际上没有验证。因为命令本身很好,这就是返回0x90的原因,但我必须先调用或设置一些东西。
3)只是预感,但我认为这是真正的罪魁祸首。在谷歌搜索时,我确实发现一些模糊的引用,必须使用参数IOCTL_SMARTCARD_SET_CARD_TYPE调用SCardControl方法并将卡类型设置为SLE4442。但是在任何地方都没有任何工作示例,我的试错法测试导致了失败。我得到“无法正确解释一个或多个提供的参数。”还有一些其他错误信息,不记得它们都是什么。假设我从谷歌代码中复制粘贴的代码具有错误代码的正确描述。
我需要的是有人发布或指引我使用WinSCard API读取/写入SLE4442的c#中具有完整+工作代码的站点,并且它必须在32位和64位环境中工作。 代码不一定是万无一失的 - 例如。很好地处理每个可能的错误情况。我应该能够自己做到这一点。但如果是(包括APDU命令结果描述 - 例如.0x90; 0x00是成功,但是0x6B; 0x4D是......等......)则更好。
答案 0 :(得分:4)
在您的示例中,写入卡的APDU应为:
FF D6 00 50 01 01
答案 1 :(得分:2)
我们的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章
答案 2 :(得分:0)
FF,D2,00,01,03,01,02,03(新引脚= 1,2,3)不起作用(在验证现有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+)远远的电池价格。如果您有兴趣,请告诉我。 我也很感兴趣您所在的位置以及您正在开发的应用程序。