java sw_APDU格式详解

APDU定义了主机和JAVA卡之间交互的数据格式,绝大部分卡片遵循此数据格式,当然为了保密或其它原因是可以自定义新的数据格式。APDU分为发送命令(C-APDU)和返回命令(R-APDU)。

一、C-APDU元素说明:

发送命令(C-APDU)的格式如下,包含一个必须头部段和一个可选数据段:

fb8c7d1f586df334a4eec2d1ac2dcd99.png

1、CLA(1字节):用于命令类别的标示,传输安全控制,传输信道说明等。

比特值

说明

0XXXXXXX

为ISO规定的指令类别,0x00,0x04(线路保护)等

1XXXXXXX

为私有自定义指令类别,0x80,0x84(线路保护)等

2、INS(1字节):用于指明CLA字段中标示的指令类中的一个特定指令。

ISO的INS值

命令描述

0E

Erase Binary

20

Verify

70

Manage Channel

82

External Authenticate

84

Get Challenge

88

Internal Authenticate

A4

Select File

B0

Read Binary

B2

Read Record(s)

C0

Get Response

C2

Envelope

CA

Get Data

D0

Write Binary

D2

Write Record

D6

Update Binary

DA

Put Data

DC

Update Record

E2

Append Record

3、P1(1字节):指令参数1,如没有填0x00。

4、P2(1字节):指令参数2,如没有填0x00。

5、LC(1字节):这个可选的字段是命令的数据字段的字节数。

6、LE(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。

7、四种C-APDU结构如下:

df0eca2e958936b38c371130c6189c77.png

二、R-APDU元素说明:

返回命令(R-APDU)的格式如下,包含一个可选数据段和一个必须状态值:

375228a53428586d4fae3ee0da8add5a.png

数据字段(可变长度,由APDU命令中的LE确定):这个可选择的字段包含卡片返回的数据。

SW1(1字节):这个必要的字段是状态字1。

SW2(1字节):这个必要的字段是状态字2。

SW1-SW2成功一般为9000,其他值为某种状态、警告或者错误!

常用SW1-SW2值:

9000: 执行成功

6100: 数据被截断

6283: 应用无效

6300: 认证失败

6400: 原因不明

6700: 长度不对

6982: 需要PIN验证

6983: 文件无效

6984: 数据无效

6985: 条件不满足

6986: 不允许该命令

6982: 安全条件不满足

6987: 安全消息丢失

6988: 安全消息不正确

6999: 应用选择失败

6A80: 数据错误

6A81: 功能不支持

6A82: 文件找不到

6A83: 记录找不到

6A84: 没有足够的空间

6A86: 不正确的参数(P1,P2)

6A88: 引用数据没找到

6B00: 错误的参数 (P1,P2)

6C00: 长度错误 (Le)

6D00: INS不支持

6E00: CLA 不支持

6F00: 未知错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值