首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MIFARE DESFire获得UID的APDU?

从MIFARE DESFire获得UID的APDU?
EN

Stack Overflow用户
提问于 2015-04-23 09:32:54
回答 1查看 6.5K关注 0票数 2

我是APDU的新手。我读了DESFire的数据表。根据它,我们有:

代码语言:javascript
复制
CLA  = 0x90     
INS  = DESFire CMD Code                                            
P1   = 0x00        
P2   = 0x00
LC   = Length of wrapped Data    
data = DESFire command parameter(s) 
LE   = 0x00

我想要获得DESFire UID,但是我不能为此创建APDU命令。有人能把我引向正确的方向吗?我创建了这个APDU,但我不确定它是否正确:

代码语言:javascript
复制
byte[8] cmd_apdu_getUID_part1= {0x90 , 0x93 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00};

我不理解像LC这样的参数的概念,我也没有找到用于获取UID的INS。UID第1部分是0x93 ox20,UID第2部分是0x95 0x20吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 06:30:04

命令9x 20是低ISO 14443-3协议的一部分,用于卡的防撞和激活。另一方面,APDU是在更高的协议层上交换的,并且只在激活卡之后才交换。因此,不能在APDU中使用这些命令代码。

如何从DESFire (EV1)卡中获取UID取决于您实际想获得的ID类型:

  • 获取在防碰撞阶段实际使用的UID,:这取决于您使用的读取器(可能还包括设备平台)。例如,PC/SC兼容的非接触式智能卡读取器通常允许使用PC/SC专用APDU读取当前选定卡的防碰撞标识符。 FF CA 00 xx (其中xx00或UID的预期长度,对于DESFire通常是0407)。
  • (仅限DESFire EV1 )如果卡的随机- UID特性未激活,则获取卡的UID:您将需要使用GetVersion命令。您需要使用CLA字节0x90来指示一个包装的本机命令,将INS设置为命令代码0x60,Lc和数据将不存在: 9060000000 答案看上去就像 <7响应数据bytes> 91 AF 其中,状态代码91 AF指示可以通过将命令代码设置为0xAF获得更多数据。所以你必须发送另一条命令: 90 AF 00 00 答案(又一次)看起来像是 <7响应数据bytes> 91 AF 所以你必须再发送一个0xAF命令。然后你会得到表格的答案: <14响应数据bytes> 91 00 其中,响应数据的最后7个字节包含UID。关于如何解析接收到的数据,请参见parseGetVersion()
  • (仅限DESFire EV1 )如果卡的随机- UID特性激活了,则获取卡的UID:这要复杂得多。您首先需要对卡进行身份验证。只有这样,您才能使用GetCardUID命令检索实际的卡UID。这个命令看起来就像 90 51 00 00 答案看上去就像 91 00
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29819356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档