问题标签 [pcsc]
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.
smartcard - SmartMX 混合卡 - 如何访问 MIFARE Classic
我有一堆带有 SmartMX 芯片(smartmx-m3b.03.d3-NX212A
准确地说)的混合智能卡,其中包含 MIFARE Classic 4k。我一直在尝试访问卡片的 MIFARE 部分,虽然在 Android 上这样做是访问android.nfc.tech.MifareClassic
标签的一项微不足道的任务,但我不知道如何在 Windows 中这样做。我是否应该寻找 PCSC 阅读器特定的命令来访问此卡上的 MIFARE Classic?或者我应该寻找 SmartMX 芯片特定的 APDU 来包装 MIFARE 经典的命令?
java - 尝试使用 java smartcardio 进行相互身份验证后出现 0x6A88 错误
我一直在尝试在 Java 上进行相互身份验证,这就是我正在做的事情:
首先,我要求挑战并获得随机数。
然后我计算所有内容,密钥种子、enc、mac 并发送相互授权命令:
我总是收到 0x6A88,我在互联网上发现它的意思是“未找到参考数据或参考数据”。
但奇怪的是,我的 prois 实现了已经在 C# 到 Java 上运行的代码,我们已经对其进行了测试,我们使用密钥等获得了相同的数据,我发现当我要发送相互身份验证时( 0x82) 命令我得到了 0x6A88 错误。
这是一些源代码,我想表明我已经尝试过使用和不使用 beginExclusive() 和 endExclusive(),但没有奏效。
有人对 Java 进行相互身份验证有同样的问题吗?
有人找到解决方案了吗?
c# - 作为 Windows 服务运行时的 PCSC.InvalidContextException
我一直在使用 pcsc-sharp 库开发一个小型智能卡扫描仪应用程序。该应用程序在作为控制台应用程序运行时工作正常,代码如下:
但是,当尝试将其作为 Windows 服务运行时 - 允许扫描卡以更新数据库 - 该事件永远不会触发,并且在服务启动时它似乎会崩溃。事件日志显示 PCSC.InvalidContextException 错误。该服务的代码几乎完全相同,但这里是示例。
我已经剥离了实际的数据库逻辑,因为它看起来工作正常,我相信在尝试释放上下文变量或将监视器连接到智能卡时它会崩溃。
还必须说明的是,我已尝试将服务从开始使用本地系统帐户更改为使用本地服务,以防出现某种访问权限错误。
如果有人可以阐明我哪里出错了,我将非常感谢您的帮助。我对使用 PC/SC 比较陌生,而且现在似乎已经在这个项目上碰壁了。
更新
我现在已经解决了这个问题;事实证明,Windows 服务不喜欢使用语句。变量被放置在块的末尾,因此上下文变得无效。
using 块被注释掉,变量的声明在它们的位置完成。OnStart 方法的新代码如下:
希望这些信息可以帮助其他人。
c - PC/SC:使用 C-API 调用时“卡未交易”
几周前,我开始为一个大学项目试验智能卡。该练习就像使用健康保险卡(德国卡,“eGK”)一样简单,找出其中保存的内容并读出“公共”部分,无需事先以任何方式进行身份验证即可读出。
幸运的是,该卡的结构有据可查,并且可以很容易地从互联网上下载该文档。我现在基本上想要的是选择EF(MF / DF.HCA / EF.VD)并读出数据。我要读出的文件是二进制文件。根据文档,前 2x4 字节表示文件两部分的开始/结束偏移量。每个部分都应该是 gzip 压缩的 XML。
起初,我使用 pcsc-lite 工具中的“scriptor”来尝试一些命令,看看它是否有效,以及是否能得到一些合理的结果。这一切都很顺利:)
正如你所看到的,这将超过 400 字节来读取(然后解压缩它们),所以我决定我需要编写一些程序来为我读取它。在这篇博文的帮助下:http: //ludovicrousseau.blogspot.de/2010/04/pcsc-sample-in-c.html我很快就能够使用 C 将我的第一个命令发送到卡上。我的基本流程程序是:
- 建立上下文
- 获取阅读器(程序打印出正在使用的阅读器,它是唯一且正确的阅读器;))
- 取卡(协议为T=1)
- 重置卡
- 告诉 PC/SC 我需要一笔交易
- 发送命令
- 结束交易
以下是我发送给 SC 的字段:
前两个命令传输得很好,我总是得到一个 0x90 0x00 回来。不幸的是,ReadOffsets-Transmit 返回错误:“事务失败”。日志显示以下内容:
有谁知道这意味着什么以及为什么会发生?我究竟做错了什么?
非常感谢您!
编辑:我有一些消息要告诉你。我在 towitoko 驱动程序源代码中发现了一些 #ifdefs 用于调试目的。现在,我为您准备了一个更详细的日志文件。带有 [[[]]] 的部分仅在错误日志文件中。如您所见,提交的字节数和接收的字节数没有任何区别!
那么,这个错误信息是从哪里来的呢?
我学到的另一件事是,这个错误似乎不是特定于读者的。我已经在朋友的内部读卡器(Windows 说它是 Broadcom 读卡器)上尝试了该程序,得到了相同的结果。因为我能想到的唯一情况是我的 C 程序中的错误,这里是带有基本宏和连接部分的源代码:
每个命令的传输部分看起来都一样。例子:
编辑:对不起,这个编辑来得太晚了,我完全忘记了这篇文章!通过用 Java 重写我的程序,我设法让它最终工作。我知道对于那些可能偶然发现这个问题的人来说,这不是一个令人满意的答案。至少我们现在可以确定错误出在 C 代码中的某个地方。如果有人知道为什么该程序不起作用,请随时回答,我真的很想知道我犯了哪个错误:)!
python - 读取 HID iClass 卡中的设施代码和卡号
我正在使用 Rfidiot 库和 Python 中的 Omnikey 5427 CK 阅读器读取 HID iCLass 卡。我可以获得例如(79 FE C1 00 FB FF 12)的 UID,我还使用 Omnikey Workbench 来获取它并且它们匹配。但是,如果我启用 Keyboard Wedge 模式,我会得到 79fec100fbff12e0007130da84,其中包括 UID + 设施代码 + CN。
我需要能够在没有键盘楔形模式的情况下读取相同的结果,但找不到任何方法来做到这一点。我试图找到一个 APDU 命令,但找不到任何相关的东西。
有没有人体验过这种卡?
rfid - APDU FF 88 00 给出的长度不正确
我有一些 PC/SC 代码已经对数千张 MIFARE 卡进行了编码。我现在有一个 HID OMNIKEY 5127 CK 阅读器,但无法对其进行身份验证。对于标准 1K MIFARE 卡,我在传输密钥中加载:
成功,然后对第一个块进行身份验证:
它给出了 67 00。还有其他人看过这个吗?
java - 测试发送APDU时无法选择AID Card Manager
我正在尝试将一个小程序加载到智能卡中,然后我只想使用以下代码进行一些测试:
所以我只想测试卡是否被识别以及是否可以正确发送 APDU。我试图通过 APDU 选择 AID 卡管理器,但我得到:
还有就是SW1 = 6A
卡SW2 = 82
没有找到AID卡管家……正常吗?我不太明白,我想知道它是否与卡使用协议的事实有关T = 1
?非常感谢您的帮助
linux - pcsc-lite : 多个没有唯一序列号的 ACR122T 设备 - linux
我有多个没有唯一序列号的 ACR122T 智能卡设备(来自 ACS)。我需要知道我从 pcsc-lite 中连接到哪个物理智能卡。我通过使用 lsusb 知道物理设备在哪个 USB 端口上,但是如何使用 SCardGetAttribute(SCARD_ATTR_DEVICE_UNIT) 映射该 USB 端口信息?
似乎地图应该在操作系统级别,因为我找不到从 pscs-lite API 中读取 USB 端口信息(lsusb 结果)的方法。
这篇文章提到了一种方法,智能卡读卡器 ACR122U 没有唯一的序列号 ,但我不明白“使用该开发号来确保我始终使用正确的读卡器”背后的细节。
任何帮助表示赞赏。谢谢,-菲尔
java - pcsc -smartcard 获取 UID
我正在尝试从我的 pcsc java 代码中读取卡 UID / HCE android 设备 UID。但我收到以下错误
虽然我在尝试获取 UID 时能够获取 ATS 位,但我得到了这个错误。我从这里引用了我的代码
代码
输出
已经参考了下面的 Get UID of Mifare Ultralight with SCL010
请帮忙 !
谢谢
nfc - 如何读取 mifare 卡的二进制块?
我正在开发一个从读卡器读取 NFC 卡的应用程序。我知道读取二进制块的代码如下:
04 用于块 4,10 用于 16 字节数据。我的卡上有数据“TEST009996”。我运行 5 个代码来读取 4-8 的二进制块,如下所示:
我得到以下结果:
或十六进制:
我应该创建一个算法来削减结果以获取数据吗?有没有更好的方法?