我想获得Mifare Ultralight NFC标签的UID.在Java中我有这个代码:
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
ResponseAPDU answer = channel.transmit(new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00));
byte[] uid = answer.getBytes();
Run Code Online (Sandbox Code Playgroud)
问题是我收到两个字节而不是UID.有什么问题?APDU是否正确?
我是一名初级程序员,在 Android 移动设备上通过 USB 主机向智能卡发送 CCID 命令时遇到问题。这次我发送了 PC_to_RDR_IccPowerOn CCID 命令 PC_to_RDR_IccPowerOn 来激活卡并收到了 ATR 响应。
接下来的过程中,我将 PC_to_RDR_XfrBlock CCID 命令发送到卡以选择 Applet,但我收到了错误响应。
CCID 响应:80 00 00 00 00 00 00 40 FE 00 - 0xFE 含义 与 ICC 讨论错误代码时 CCID 超时参考文档 DWG 设备智能卡集成电路设备第 6.2.6 节。
我找到了解决这个问题的信息,但没有找到解决的方法。如何解决此问题并使 APDU 响应返回 90 00?
更多信息#1 This Byte array is the ATR value (answer to reset) that I get from RDR_to_PC_DataBlock answer is
ATR response: 3B 68 00 00 54 48 20 4E 49 44 20 …Run Code Online (Sandbox Code Playgroud) 是否有Java库(API),我可以使用它与智能卡进行交互?与WinSCard库类似.
我需要能够连接智能卡并从中读取数据.我需要在Java中实现它,以便我可以在任何操作系统(Linux,Mac,Windows)下使用它.因为,WinSCard库只能在Windows下运行,因为它使用DLL(WinSCard.dll).
在Java中有没有像WinSCard一样好的东西?
我需要从磁卡上获取Track 1和Track 2数据,并通过网络将它们发送到等待的服务器.从USB HID磁卡读卡器获取轨道数据的简便方法是什么?
如果它有帮助,我有一个MAGTEK迷你刷磁条读卡器(部件号21040140)
我是操作系统不可知的 - Windows,Mac或Linux的解决方案会很棒.最好不要使用.NET,但如果这是我最简单的方法.
你们都觉得怎么样?
谢谢!
我已经检查了MIFARE Ultralight和TOPAZ/Jewel IC标签的编程接口.API很好地描述了如何在卡上保存字节,如何寻址存储器块,如何进行所有操作,如读取,读取,使用OTP(一次性可编程)功能,如何读取ROM字节,如何从空闲切换到就绪状态(REQA,WUPA命令),它表示命令是否受CRC保护,如何访问标签UID等.
当我开始编程NFC阅读器(ACR122U或SCL010)时,我发现PCD(阅读器)和PICC(标签)之间的所有通信都是从ATR(应答复位)命令开始的,这是在Internet上所描述的命令PCD发送给PICC用于识别目的.
但是没有一个标签文档提到ATR命令 - 所有与标签通信时的通信(PQR)都以REQA,WUPA命令开始,以便将卡切换到就绪模式.
我的理解是ATR是由PC/SC基于读卡器与之通信的NFC卡构建的.一旦读者检测到基于它的标签是什么类型的技术,就会创建ATR.另外根据文档,针对不同NFC读取器的ATR对于相同的NFC标签是不同的.
我对吗?PC/SC是否构建了ATR?
BR STeN
我很难理解我必须使用什么协议来与卡T0或T1通信?所以,如果我错了,请纠正我,但如果卡支持两者,读者实际上决定用什么协议与卡通信.
所以我现在的逻辑是:
// if ATR(T1) -> set_params(T1 structure) -> T1 APDU communication
// if ATR(T0) -> set_params(T0 structure) -> T0 APDU communication
Run Code Online (Sandbox Code Playgroud)
但事实证明,逻辑是错误的,它对大多数读者来说都是偶然的.我刚刚发现即使卡ATR返回T1,也希望T0通信的读卡器.
问:确定使用什么协议的逻辑是什么?如果背后有规格,请你指点一下.
编辑:我忘了在操作系统之前提到我的代码处于预启动环境(UEFI).所以我没有(使用)任何API.我的代码处于字节流APDU级别,并使用UEFI UsbIo通信直接与硬件对话.
谢谢大家!
祝一切顺利,
亚历克斯
我有一个始终报告 64 位的读卡器,并且可以读取具有 4 或 7 字节 UID 的卡。
作为一个例子,我看到它可以报告:
04-18-c5-82-00-00-00-00- 形式为 4 字节的 UIDuid0-uid1-uid2-uid3-00-00-00-0004-18-c5-82-f1-3b-81-00- 形式为 7 字节的 UIDuid0-uid1-uid2-uid3-uid4-uid5-uid6-00是什么阻止 7 字节 UID 将 uid4、uid5 和 uid6 设置为零?这是否包含在规范中?如果有,哪个规格?
rfid uniqueidentifier smartcard-reader mifare contactless-smartcard
我试图通过HID OMNIKEY 5427 CK通过APDUs命令来操作MIFARE卡即.Ultralight C卡,在使用WinSCard.dll的Windows 10 x64 OS环境中.(我在NXP NDA下并且可以完全访问他们的文件)
我试图在网上找到信息好几天了.除了2pages手册之外,似乎没有该模型的已发布文档.
像GetUID(FFCA000000)这样的简单命令是可以的,我可以取回实际的卡UID.
但对于"使用卡进行身份验证",来自HID 5421模型的参考文档说我应该从OpenGenericSession(FFA0000703010001)开始,我试过了,读者总是用6D00h回复(错误)
我试过直接发送验证命令'1Ah + 00h'(FFA00005080100F30000641A0000),读者也总是回复错误代码.
我对HID 5421型号有经验,而且很直接,不知道为什么这款5427不像它的兄弟.
是的,我联系了HID支持.没运气.我没有从他们那里获得有用的信息.
如果有任何想法或有5427软件开发指南请帮忙.我现在已经把头发拉了近一个星期.
我已经成功从EMV卡中检索了CVM列表。
0000 0000 0000 0000 4103 4203 1E03 1F02
Run Code Online (Sandbox Code Playgroud)
从EMV规格书3开始,前4个字节和后4个字节为数量,其余为CV规则。使这些成为简历规则4103 4203 1E03 1F02
我假设我需要将CV规则中的前两个字节转换为二进制并与上表匹配?但是,为什么上表的单元格为空?也有人可以用简单的伪代码算法来解释吗?
当我使用springcard读卡器扫描我的卡时,我需要知道这张卡是否是以下类型之一:CTS或CD_97或ISO_A或ISO_B或FRD如何从ATR获取这些类型?
这些是ATR的一些例子,我得到了:
Navigo:3B 88 80 01 00 00 00 00 00 71 81 00 F9
Técély:3B 8F 80 01 80 5A 0A 01 01 20 03 11 10 1D 86 BC 82 90 00 C9
Oura:3B 8F 80 01 80 5A 0A 01 02 20 03 11 03 53 52 A2 82 90 00 5D
Citycard:3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 02 00 00 00 00 69
我们是如何从ATR获得这些类型的详细解释?
我正在使用SpringCard读卡:http://files.springcard.com/pub/pmd841p-fa.pdf
我能够在第27页和第28页找到解决方案的一部分 …