【问题标题】:Reading a response of an APDU command读取 APDU 命令的响应
【发布时间】:2014-05-09 07:20:43
【问题描述】:

我正在尝试从智能卡中的文件中读取数据,我正在使用以下 APDU 命令

00 B0 00 02 00

但我得到了这样的回应:

A1 1B 4F 0C A0 00 00 00 77 02 08 05 04 49 44 01 50 07 43 4E 49 2D 43 53 45 51 02 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 

如何以十六进制编码转换或读取此值?

【问题讨论】:

    标签: java smartcard apdu


    【解决方案1】:

    最后两个字节组成状态字 (SW),首先是 90,然后是 00。剩下的就是文件中二进制数据的十六进制编码。

    看起来内容是 ASN.1 BER 编码的。因此,您需要对响应进行 BER 解码。 BER 是 TLV(标签长度值)。所以前两个字节是标签和值,A1 1B。文本的含义是特定于上下文的(因此请查看此特定文件的规范)。所以你的文件实际上包含 2 + 1B 字节,或 29 字节,其余的保留为默认值 00

    BER 解码是在 ISO 7816-4 中指定的,您确实应该了解有关基于文件的智能卡的任何内容。还要看一下Wikipedia page about ASN.1,看看解码后的值here

    【讨论】:

    • 似乎:4F - AID TLV,包含 Oberthur 的应用程序 (RID=A000000077)。 50 - 应用程序标签“CNI-CSE”。
    • 没想到在这个特定的问题上发表了这么久,尤其是在 org.提问者似乎已经放弃了它(你真丢脸,阿纳斯)但是,是的,更多信息here
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多