问题标签 [winscard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
23602 浏览

smartcard - 通过OmniKey的非接触式卡,如何获得“UID”?

我正在尝试使用非接触式 OmniKey 5321 读卡器从智能卡中读取信息。

编辑:增加了赏金。

我正在用 .NET 3.5 程序编写 C# 3,所以这是一个 Windows 应用程序。

该卡上印有一些信息,我认为以某种方式存在于卡数据中(下面有一张卡和读卡器的照片。)

该卡上印有以下信息:

使用 OmniKey 读卡器附带的诊断应用程序时,我得到以下信息:

现在,这是我考虑过的一些转换:

  • 447 十进制 = 1BF 十六进制(未找到)
  • 八进制 447 = 十进制 295(未找到 BCD 类型编码)
  • 447 八进制 = 127 十六进制(未找到)
  • 447 十六进制未找到

这是我的问题:

  • “UID”号码是我可以依赖的唯一号码吗?我并不关心447号码,我只需要知道我从这张卡中提取的信息将在以后唯一标识它,以便我可以将其链接到卡的所有者
  • 我将如何阅读 UID 号码?在 Windows 中使用 WINSCARD.DLL 我可以看到我得到了“ATR”数据,每个字节,但 UID 显然不存在于该部分中。

这是照片,如果它可以为您提供任何信息。

带卡的 OmniKey 读卡器背面

0 投票
1 回答
6182 浏览

smartcard - 为什么 Omnikey 5325 智能卡读卡器无法识别我的卡?

我购买了智能卡读卡器(OMNIKEY 5325 CL USB Prox)并安装了所有驱动程序,但它无法读取我的卡(1386 ISOProx II 卡)。诊断工具似乎无法识别它,调用 SCardTransmit 会返回 ERROR_GEN_FAILURE。该工具说资源管理器已启动并正在运行,但它没有说明 Scardsvr.dll 的版本号。只是不适用。我的卡肯定有效,但我完全被难住了。尝试卸载所有驱动程序和所有内容。运行 Windows 7。有什么想法吗?

诊断工具截图

0 投票
2 回答
5463 浏览

windows - 如何在 Windows SmartCard 框架中使用扩展 APDU

我正在使用 WinSCard 读取符合 ISO 7816 的智能卡(具体来说,它是 PIV 卡)。该卡上有一张大约 12 KB 的图片。现在,我以 T=1 模式连接并使用 SCardTransmit 函数发送我的 GET DATA APDU 命令,然后发送一堆 GET RESPONSE APDU 命令。我最终从卡上获取了所有数据,但它需要对 SCardTransmit 进行 40 多次调用,因为每次调用我只能获取 256 个字节。每次调用大约需要半秒才能完成,因此最终需要将近 20 秒才能读取 12 KB 的数据。

我想我可以更快地做到这一点。NIST 规范规定“通过阅读器的联系接口检索 12.5 KB 数据的时间不得超过 2.0 秒”。该规范引用了扩展长度 APDU,所以我认为它是受支持的,但它的使用没有记录。我试图弄清楚,但我无法让它工作。

这是当前命令,它返回 256 个字节,状态为 0x61 0x00,这意味着还有更多数据要获取。

ISO-7815-4 规范的第 5.3.2 部分说明了编码 Le:

情况 4E - L= 5 + (B2||B3),(B1)=0 和 (B2||B3)=0

  • Lc 字段由前 3 个字节组成,其中 B2 和 B3 代码 Lc (!=0) 的值从 1 到 65535
  • B4 到 Bl-2 是数据字段的 Lc 字节
  • Le 字段由最后 2 个字节 Bl-1 和 Bl 组成,其中代码 Le 的值从 1 到 65536

我认为这意味着我的命令应该如下所示:

但这不起作用。我得到响应代码 0x67 0x00,意思是“长度错误”并且没有从卡中检索到数据。想法?

0 投票
2 回答
4318 浏览

c# - .NET 或 COM HID iCLASS 智能卡读卡器

我的编码几乎总是与我的 Omnikey RFID CardMan 5321 智能卡一起使用。问题是我们今天收到了标有“HID iCLASS GL”的新卡,这些卡似乎与我们的编码不兼容。

没有经过整个源代码,当我们调用以下行时,我们的问题就出现了,它基本上告诉我们数据的长度: lResult = SCardTransmit(hCard, 0, bytCommand, lLen, 0, byReadBuffer, iReturnlength)

我们只返回一个长度为 2 的数据,它的数据被标记为“x69 x86”。即使我告诉它读取所有 255 个字符,其余的也只是标记为空。

现在我知道我们的读卡器可以读取这些卡,因为 OMNIKEY 诊断工具向我们显示以下内容: 状态:已插入智能卡 FW:5.10 端口:USB Lib:1.0 智能卡名称:iCLASS 32KS 8x2+16 ART:有效协议:ISO 15693 (第 2 部分) PICCtoPCD:26,48 kbps PCDtoPICC:26,48 kbps 频率:13.56 MHz

正如我之前解释的那样,除了“x69 x86”之外,我的卡没有返回任何数据,这在我的编码中一切正常,这肯定是不正确的。

如果有人有任何阅读 HID iCLASS 卡的经验,我将非常感谢一些有关如何阅读的反馈。即使我们必须许可软件,也没关系。

提前致谢!

0 投票
2 回答
8877 浏览

windows - 使用 WinSCard 获取 PCSC 读卡器序列号

如果读卡器中没有卡,我在获取 PCSC 读卡器序列号时遇到问题。我正在使用 winscard.dll 和 c++。

以下代码仅适用于读卡器中存在卡的情况。否则不检索 SCardHandle。我还没有找到任何其他方法来获取 SCardHandle。

有没有办法在不连接卡的情况下获取读卡器序列号?

0 投票
1 回答
4494 浏览

c# - 来自 O2Micro 阅读器上的 WINSCARD.DLL 方法 SCardTransmit 的未知响应以及响应长度信息

为了与智能卡通信,我使用 WINSCARD.DLL 作为 API 将 APDU 命令发送到智能卡。对于几个读卡器来说,这是按预期工作的,但不知何故,如果我发送,我会从方法中得到一个未知的回报(它不在http://msdn.microsoft.com/en-us/library/ms936965.aspx上)值SCardTransmitO2Micro 阅读器的命令。

什么工作:如果我发送命令(十六进制值):

我得到回应SW1: 61. SW2: 1F

响应告诉有0x1F可用的字节。所以我发送命令:

但是在那个命令上,我没有得到任何数据和返回值0x57

我的问题是,是否有人知道返回值0x57的含义以及如何解决或解决它的方法。

0 投票
1 回答
428 浏览

c# - 需要各种 WinSCard API 所期望的 HEX 值

我们正在尝试使用智能卡将用户身份验证到在 Windows 7 机器上运行的应用程序中。我们正在使用WinSCardDLL,但我们不了解HEX传递给各种 APISCardDisconnect等的确切值。

您能否请我参考所需的十六进制值列表或任何其他在使用时可能会有所帮助的论坛/链接WinSCard.dll

0 投票
1 回答
3500 浏览

.net - 带有 winscard.dll 的 .NET 应用程序中的 ERROR_INVALID_HANDLE

我正在创建一个 .NET Windows 服务来与智能卡读卡器进行通信。主要组件是一个名为 winscard.dll 的 Windows DLL,我在 .NET 代码中使用 DLLImport 属性。在 Windows XP 32 位上一切正常,但是当我在Windows 7 x64上运行它时,我在调用SCardTransmit时收到0x6 ERROR_INVALID_HANDLE结果。应用程序(作为命令行应用程序的服务)可以连接到读卡器,但不能从卡中读取任何内容。

任何的想法?

0 投票
1 回答
1108 浏览

c# - 谜团:4 个字节应该代表一个日期,但如何?

所以我已经能够从德国官方智能卡中读取一些不安全的值。它适用于数字和字符串,但我无法理解如何解释日期。

我想阅读的日期被指定为 4 字节日期,如规范中所示:http: //imgur.com/3jU8k

我读到的四个字节是:

并且应该代表这个日期:20.02.2012 二进制:

另一个:

应该代表:19.02.2017

请帮我解决这个编码谜题


卡上的数据可以通过商业软件读取,所以我想我得到的原始数据可以以任何方式使用。

对于感兴趣的人:供应商有一个非常庞大的规范,我已经搜索了很多次(http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32002R1360:DE:NOT语言)卡片的结构在第 119 页首次提到

0 投票
1 回答
4798 浏览

c# - PCSC 智能卡读卡器的“友好名称”是如何构建的?

我使用 WinSCard 列出所有读者,这给了我这样的列表:

这很棒,但我不知道哪个名字属于哪个读卡器。

这些名字从何而来?它们是如何构造的?

到目前为止我发现的是:在注册表中,有一个HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services键。在此键下,您可以找到与读卡器的“服务”(我通过查询 WMI 注册表找到)匹配的子键。例如:为SCM Microsystems Inc. SCR3320 USB Smart Card Reader读者提供的服务是SCR3XX2K

这个子键 ( SCR3XX2K) 有另一个子键Enum,它有多个有趣的值:

  • Count:DWORD,连接的阅读器数量
  • 0, 1, 2: STRING,硬件设备 ID

我猜这些是附加到“友好名称”的数字,但我无法弄清楚名称字符串是如何构造的。我需要它来将硬件设备 ID(我通过 WMI 获得)映射到它们的友好名称。

那么,用于为智能卡读卡器创建“友好名称”的模式是什么,这些值从何而来?