- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 Nexus 4 和最新的 Android API 级别 18 与 Mifare DESFire EV1 AES 标签通信让我很头疼。按照 NXP 本地协议(protocol),为了写入和读取此类标签,必须遵循以下步骤:
为此,我使用了 Android 的 IsoDep提供对 ISO 14443-4 属性和 I/O 操作的访问的类。非常奇怪的是,一旦我发送 select application native 命令,我就会收到意想不到的响应。假设我有 AID F4013D
,所以我发送:
-> 5AF4013D
<- 6E00
所有可能的响应都必须是一个字节长度(成功 0x00
或 error_code),绝不能是两个或更多。因此,成功响应之前的 0x6E
绝对是意外的。它并不总是发生,当它不发生并且工作正常时,选择应用程序和身份验证过程工作正常。但是,一旦通过身份验证,写命令就没有正确的行为,所有写命令都会以来自 PICC 的 0xAF
而不是成功的 0x00
结束。似乎 PICC 在不应该的时候期望一些额外的数据(我发送了正确长度的有效载荷)。如果我发送任何其他命令,我会收到 0xCA
(命令中止)错误代码。
-> 5AF4013D
<- 00 /*Success*/
-> AA01
<- AFA8394ED57A5E83106B4EE72FD2BB0CC4
-> AF148F525E1DDE0AD6AB60B4B615552475C91F2E8D89B8523E4465113DD5BD19C6
<- 0066D255C93F2F492AFE3715C88964F1BD /*Authentication success*/
-> 3D02000000030000222222 /*Write 3 bytes to file nº2*/
<- AF /*Unexpected, 0x00 was expected*/
正常情况下,如果我使用个人阅读器(非 Android NFC)发送这些类型的命令,它总是可以正常工作。 Android NFC API 中的某些东西似乎变得很奇怪,它应该只是一个从不解释或修改数据的原始数据传输器。
我也尝试过使用 ISO 7816-4 APDU 结构得到相同的结果。出于好奇,使用 Galaxy Nexus 不会发生选择应用程序奇怪的响应,但是写入命令总是会发生。
最佳答案
(1)关于状态码6E00的第一部分:
6E 00
不是“奇怪的字节 0x6E
+ 成功状态代码 0x00
”。相反,它是一个响应 APDU 状态字 6E 00
(“不支持的类别”)。这表明之前使用基于 APDU 的访问与卡进行过通信(例如,Android 本身尝试将卡读取为 Type 4 标签并且之后没有重置连接)。因此,该卡将期望所有进一步的通信都在 ISO 7816-4 APDU 中进行。在这种情况下(即,如果您收到 ISO 7816-4 状态代码,如 6E 00
),您可以通过简单地包装您的 native 命令来继续使用 DESFire APDU 包装命令。
编辑:事实上,这在某种程度上是 NFC 设备上的预期行为。这个想法是 NFC 设备将自动扫描检测到的标签以获取 NDEF 消息。对于 DESFire 卡,NFC 设备会将卡检测为潜在的 Type 4 标签。因此,NFC 设备将发送 ISO 7816-4 APDU,就像它发送给任何其他类型 4 标签一样。因此,如果 NFC 设备在将检测到的标签交给应用程序之前没有重置与标签的通信,则应用程序只能使用 ISO 7816-4 APDU 进行通信。但是请注意,我认为这是一个错误,因为这种情况只发生在同一设备上的一些激活中。在我看来,在一种特定设备型号上的行为应该是一致的。
编辑: 虽然我不认为此行为是一个错误,但它实际上是由 Android 的 NFC 堆栈中的一个已知错误 ( #58773 ) 引起的,该错误适用于具有 Broadcom NFC Controller 的设备。在受影响的设备上,自动存在检查会以定时间隔发送 ISO 7816-4 APDU,这会导致 DESFire 卡切换到 ISO 7816-4 APDU 模式。
(2) 关于(意外)响应代码 0xAF 的第二部分:
您的文件的通信设置是否设置为“由 MACing 保护的普通通信”或“完全加密的通信”?在那种情况下,仅仅发送三个数据字节是不够的。相反,您需要发送纯数据加 MAC 或填充、CRC 和加密数据。因此 0xAF
表示卡需要更多数据。
编辑: 所以总结下面的评论。发送更多字节后(每次收到一个字节,每次接收到 0xAF
状态代码:AF FF
),事实证明卡还需要 8 个字节。 8 个字节正是用于 AES 认证的 CMAC 的大小。因此,通信设置被设置为“由 MACing 保护的普通通信”。
关于Android NFC 与 Mifare DESFire EV1 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589534/
每个讨论:On active slide, append input 虽然我还没有弄清楚这一点,但我感觉很接近。我只是被难住了。代码看起来是正确的..但我仍然收到错误。特别是“slider.ev.on
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
我正在努力实现双指缩放代码。 我只是检查了 WinJS 语义缩放实现并找到了有趣的代码片段。 适用于 JavaScript 1.0/js/ui.js 的 Windows 库 行号:30710、3072
自 2 月起,GlobalSign 只颁发 EV 代码签名证书。这意味着代码签名必须使用硬件 token (Safenet USB eTokens) 完成。 自从我不得不切换到 EV 代码签名后,我注
我最近在我的网站上安装了 EV SSL 证书,它是从 GlobalSign 购买的。我关注了https://www.globalsign.com/support/install/install_apa
我有两个包含(唯一)字符串的文件:第一个是 1.txt,有大约 1000,000 个唯一字符串,而 2.txt 有大约 10,000 个唯一字符串。我想删除 1.txt 中所有出现的 2.txt 字符
当我尝试通过 ev.preventDefault() 使用对象解构时,我在 Chrome 中收到以下错误: 未捕获的类型错误:非法调用 但是,当我使用 ev.preventDefault() 而不进行
在redis Async Context中,定义了struct ev: struct { void *data; void (*addRead)(void *privdata);
明日方舟SW-EV-4通关攻略 1.左侧单先锋开,上医疗朝右,右侧补上先锋,由于关卡的敌人魔抗比较高,中间靠下补上单体狙,中间靠上补上群狙,一律朝下,右侧补上医疗先锋换重装 2.接下来是背板,6
明日方舟SW-EV-3通关攻略 1.双先锋开,草丛补上狙击术士朝左,医疗朝右即可 2.8杀之后上路会有雷达兵,能照出你草丛的角色,同时也会刷一些术士,如果不想高台被打就下工具人切雷达兵,或者先锋
1、首先是要用练度最高的狙击挡门口(蓝毒最好精2一级 没有的话就精1六十级加一个强一点的单奶) 2、之后2个单法和一个辅助(最好用史都华德、紫兰、阿米驴)主打后面的飞机 3、等到飞机打完了,大锤
问题描述 明日方舟SW-EV-5突袭怎么通关 精选答案 1、开局先放蓝毒在右侧清兵 2、等左边大锤哥走过临光的位置,确保不会拉到仇恨,下临光 3、等费用能下小羊时,下小羊 4、等费用能下
当我有这样的事情时 ".mylabel click": function (el,ev){ //mycode in here } el 是什么意思? ev 是什么意思? 我尝试在 canjs 中搜索它
我的公司从赛门铁克购买了 EV 证书,用于我们生产的软件产品。具体称为:Symantec Class 3 Extended Validation Code Signing CA – G2。 我们使用
我有一个这样创建的文件句柄对象(为清楚起见略作编辑): sub TIEHANDLE { return $_[0] if ref($_[0]); my $class = shift;
使用 preventDefault 停止点击“a”标签以滚动回页面顶部。另一方面,如果我在 jQuery 中编码了 .preventDefault(),我的“a”标签将得不到任何响应。也许你们可以提供
我目前在一个小型网站上工作。为了让它看起来更合法和专业,我想在浏览栏(EV SSL 证书)中有一个带有我名字的绿色锁。为普通和 EV SSL 证书创建 2 个 .pem 文件。问题是:我不知道如何继续
我最近从 comodosslstore.com 为我的站点购买了 EV ssl 证书,该站点托管在 GCP 上并从 bluehost 购买了域,但现在我在验证我的身份时遇到了一些问题,并且在我的 ss
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
考虑以下示例代码,它使用 TrustManager 记录传出连接是否使用了有效证书(但在所有情况下都接受连接): import java.security.*; import java.securit
我是一名优秀的程序员,十分优秀!