zoukankan      html  css  js  c++  java
  • PBOC APDU命令解析【转】

    应用层发出的命令报文和卡片回送到应用层的响应报文统称为应用协议数据单元(APDU)。响应是
    和命令相对应的,通常被称为APDU命令-响应对。在一个APDU命令-响应对中,命令报文或响应报文都可

    能包含数据。

    1:C-APDU 格式


      C-APDU由一个4字节长的必备头后跟一个变长的条件体组成。
      C-APDU中发送的数据长度用Lc(命令数据域的长度)表示。
           R-APDU中期望返回的数据字节数用Le(期望数据长度)表示。
      当Le存在且值为0时,表示要求可能的最大字节数(≤256)。
      在应用选择中所给出的读记录(READ RECORD)命令、选择(SELECT)命令Le应该等于“00”。

    图1:APDU命令结构

    2:C-APDU命令内容

      命令均由终端应用层(TAL)发出,它用5个字节组成的命令头通过TTL向IC卡发送指令。命令头由5个连续字节CLA、INS、P1、P2和P3组成:
    CLA:命令类别;INS:指令代码;P1 和 P2:附加参数;P3:根据不同的 INS, 指明发送给 IC 卡的命令中数据的字节长度或期待 IC 卡响应的最大数据长度。

    图2:APDU命令内容   

    3:R-APDU格式


    当使用T=1协议时,对于所有Le=’00’的命令,状态字SW1 SW2=“90 00”或“61 La”均表示命令的成功执行。
    但由于可读性的需要,这两种状态字只用了“90 00”作为参考。


    R-APDU格式由一个变长的条件体和后随两字节长的必备尾组成,见图3。

    图3:APDU响应结构

    R-APDU中接收到的数据字节数用Lr(响应数据域长度)表示。Lr不通过传输层返回,应用层在需要时可以依靠响应报文数据域对象结构计算出Lr。
    响应结尾的2个字节代码是命令的处理状态,它们通过传输层回送。

    表1:响应 APDU 内容

    4:命令报文和响应报文

    A:读记录命令

    表2:读记录命令报文

    表3:读记录命令引用控制参数(2)

    B:选择命令


    选择命令通过文件名或AID来选择IC卡中的PSE或ADF。成功执行该命令设定PSE或ADF的路径。
    后续命令作用于SFI选定的PSE或ADF相联系的AEF。从IC卡返回的响应报文包含回送FCI。

    表4:SELECT 命令报文

    表5:SELECT命令引用控制参数

    表6:SELECT命令的可选参数

     响应报文数据域


     响应报文中数据域应包括所选择的PSE或ADF的FCI。在选择命令的响应报文回送的FCI模板中,除了“BF0C”模板中包含的数据元之外,不应有附加数据元。
     表7定义了成功选择PSE后回送的FCI。

    表7:选择 PSE的响应报文(FCI)

    表8:选择 ADF 的响应报文(FCI)

    当一个DF成功选中后,终端重复发出选择(SELECT)命令,且P2设置为选择下一个文件的选项及使用相同的部分DF名时,
    卡片应该选中与部分DF名称匹配的不同的DF文件(如果这样的DF存在)。在没有应用层命令干扰的情况下重复发出相同的选择(SELECT)命令,
    卡片应该可以找到所有满足条件的DF文件,且每个文件不会被找到两次。当所有满足条件的DF都被选择后,再发出同样的选择(SELECT)
    命令,应该得到没有文件被选择的结果,卡片应该响应SW1SW2=“6A82”(文件未找到)。

    参考文档

    PBOC3.0规范

    起草时间

    2015-10-22

  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/5715611.html
Copyright © 2011-2022 走看看