问题标签 [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 投票
0 回答
743 浏览

authentication - 使用 winscard 的 MIFARE desfire EV1 通信

我需要一些帮助与 Desfire EV1 卡进行通信。库 (winscard.dll) 似乎自动处理来自卡的所有响应,这些响应具有 ADDITIONAL_FRAME (AF) 字节,以便应用程序接收已处理的数据。例如,我发送 GetVersion 命令如下:

[out] 90 60 00 00 00,响应为:
[in] 04 01 01 01 00 18 05 04 01 01 01 04 18 05 04 83 71 2A 9F 43 80 BA 64 17 8F A0 07 15 91 00

注意:我将命令数据包装在 ISO 7816 headers中。

我希望沟通是这样的:

[出] 90 60 00 00 00
[入] 04 01 01 01 00 18 05 91 AF

[出] 90 AF 00 00 00
[入] 04 01 01 01 04 18 05 91 AF

[出] 90 AF 00 00 00
[入] 04 83 71 2A 9F 43 80 BA 64 17 8F A0 07 15 91 00

在卡身份验证过程中也会发生同样的事情,所以当我发送

[out] 90 0A 00 00 01 00 00,我返回
[in] 91 00
而不是卡片挑战。

有没有办法禁用这种行为?

谢谢。

0 投票
1 回答
301 浏览

c++ - 在 C++ 中测量 APDU 命令到 Java 卡的时间的最佳方法

我正在尝试对 Java Card 进行某种定时攻击。我需要一种方法来测量从发送命令到获得答案之间经过的时间。我正在使用winscard.h界面并且语言是c++. .我为接口创建了一个包装器,winscard.h以使我的工作更轻松。例如,为了发送一个APDU现在我正在使用这个似乎有效的代码。基于这个答案,我更新了我的代码

};

我的代码因错误而失败The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.。我的猜测是rdtsc我的英特尔处理器不支持该指令。我有一个英特尔 Broadwell 5500U。.我正在寻找一种适当的方法来进行这种测量并最终获得更准确的响应。

0 投票
2 回答
673 浏览

smartcard - PCSC 检测多个智能卡

是否可以通过 WinSCard api 检测智能卡读卡器中何时有多个智能卡?我正在读取卡片ID,但是当有多张卡片时,它变得模棱两可,应该返回哪一张。所以我想禁止这种情况并返回错误消息。

0 投票
2 回答
1517 浏览

c++ - WinSCard SCARD_E_PROTO_MISMATCH 连接到爱沙尼亚身份证时

我正在尝试阅读爱沙尼亚身份证的个人文件。

我需要将以下数据发送到卡(从 这里),以便从个人文件中读取记录(即 ID 号、姓名等):

但是,原始字节在 T=0 协议中,并且卡在接受 T=0 之前卡在 T=1 的时间过长。事件顺序如下:

  1. 卡连接到读卡器
  2. 程序返回SCardStatusChange并开始处理卡
  3. 在尝试连接到卡(SCardConnectSCardReconnectSCARD_E_SHARING_VIOLATION时,一遍又一遍地收到错误,大约 5 秒
  4. 然后,在尝试连接时,SCARD_E_PROTO_MISMATCH会在 3 到 30 秒之间的任何时间收到错误,甚至更多。
  5. 之后,卡连接成功并读取数据。

我可以在 T=0 协议中以某种方式更快地连接到它吗?

我的源代码的简化版本如下:

0 投票
0 回答
54 浏览

smartcard - 错误代码 sw=6D04 是什么意思?

根据ISO/IEC 7816,除了 之外没有其他6DXX代码XX=00,但这6D04就是我得到的。有谁知道或者有更新的版本吗?

我不认为,它可能类似于“指令代码不支持或无效”,因为命令似乎是有效的:当执行时AB,然后A返回9000B返回6D04。执行时BA,则B返回9000A返回6D04

可能有什么问题... :(

0 投票
1 回答
884 浏览

vb.net - SCardGetStatusChange Winscard 中的未知读卡器

我是.net 的新手,我想确定是否使用winscard 的SCardGetStatusChange 检测到或删除了卡。但它返回 retcode = -2146435063,当转换为十六进制时会给我 0x80100009 = SCARD_E_UNKNOWN_READER。我只是基于pinvoke.net的代码

这是我的代码示例

并以我的形式。

输出是

Ret=-2146435063 读卡器:ACS ACR1222 3S PICC 读卡器 PICC 0 失败

0 投票
0 回答
289 浏览

vb.net - 如何在不消耗处理器时间和资源的情况下在后台运行代码?(如何停止故意的无限循环?)

我编写了一个有意的无限循环来识别是否使用 vb.net 在读卡器上检测到或删除了卡。因为我不知道winscard中是否有类似waitForCardPresent的东西。

所以这个概念是,一旦单击按钮Connect,检查卡的 ifinite 循环就会启动。

所以我在 backgroundworker 中的代码如下所示:

此代码说明程序将在后台持续检查卡状态。我写了:

所以我的程序不会充满状态,只会打印连接删除一次。

所以我的问题是:

  1. javaxx smartcardio 的 waitforcardpresent() 和 waitForCardAbsent() 的概念和我的想法一样吗?
  2. 是否有更好的代码来使用 vb.net/winscard 检测卡状态?如果是,如何?
  3. 我怎样才能停止这个无限循环?假设用户单击“断开连接”按钮?
  4. 我的无限循环不好吗?

编辑 无限循环不是一个好主意。那么如何在不消耗资源的情况下在后台检测卡状态呢?或者我应该如何正确使用scardgetstatuschange?

我虽然认为 -1 在

WinscardFun.SCardGetStatusChange(hcontext, -1, rs, 1)

意味着它将无限循环基于

0 投票
0 回答
76 浏览

smartcard - 智能卡接口数据单元不匹配

我正在编写从学生证读取数据的代码。卡初始化后,选择卡上的目录和文件,我开始使用 READ BINARY (B0) 从其中读取数据。

根据ISO 7816-4:Interindustry Commands for Interchange

如果 P1 中的 bit8=0,则 P1||P2 是从文件开头开始以数据单元读取的第一个字节的偏移量。

我正在读取数据块,每 16 个字节。在第一个循环中我想阅读offset = 0所以我设置P1 = 0x00并且P2 = 0x00一切正常,前 16 个字节是从卡传输的。

问题从第二个循环开始,接下来的 16 个字节应该被读取,offset = 16所以我设置P1 = 0x00P2 = 0x10但我从offset = 64.

经过一些测试,我发现它P1||P2总是被解释为 4 个字节的偏移量。

似乎我的卡正在使用每个 DWORD 大小的数据单元(提到 ISO 7816-4)。

Web 中的所有示例都将数据单元视为字节,并且一切似乎都适用于作者/用户。我的问题是:如何在应用程序运行时确定数据单元的大小 ?

0 投票
1 回答
765 浏览

c++ - Windows 7 SCardGetStatusChange 中的 C++ 源代码返回代码 6

我正在实现一个 PKCS#11 库,它将使用windows中的winscard和MAC中的PCSC与读卡器通信。

我正在使用以下示例代码从读卡器获取卡更改状态。它在 MAC 中工作正常,并为 dwEventState 返回 0x0122。但在 Windows 中SCardGetStatusChange总是返回 6 并且dwEventState没有改变。

虽然 SCardConnect 在 windows 中成功连接读卡器并返回卡句柄。

资源

代码输出如下

请帮忙。

0 投票
1 回答
2067 浏览

c# - SCardEstablishContext 内存泄漏

我们突然在某些 Windows 安装中遇到了智能卡 API 的问题。调用 SCardEstablishContext 函数时似乎存在内存泄漏。可以在控制台应用程序中使用 http://www.pinvoke.net/default.aspx/winscard.scardestablishcontext提供的代码示例重现该问题

为了测试,我们在一个无限循环中调用 SmartCardInserted() 方法,延迟很小 => 内存不断增长并分配了新的 hadles。

我们在运行 Windows 10 或 Windows Server 2012 的系统上看到了这个问题,但在 Windows Server 2008 上没有。

任何想法都非常感谢!