PSAM 卡授权流程APDU参考

PSAM获取终端机编号 00 B0 96 00 06

读版本号:

选MF 00 A4 00 00 02 3f 00
选0015 00 A4 00 00 02 00 15
读0015 00 B0 00 00 10
选并读0015用一条命令
00 B0 95 00 0E
示例应答
33 01 03 01 00 00 00 00 00 01 05 01 01 01 90 00
PSAM序列号:33010301000000000001
PSAM版本号:05
PSAM版本号 ≥ 0x05,支持国密SM4算法!

返回的PSAM版本号>=0x05 且不为0xFF则判断为国密PSAM;否则为3DES

国密PSAM继续:
选DF01 00 A4 00 00 02 df 01
*选0017 00 A4 00 00 02 00 15
读0017 00 B0 00 00 20*
选并读0017
00 B0 97 00 1B
应答
01 00 FF FF FF FF FF FF FF D5 E3 BD AD 33 01 00 01 20 20 04 08 20 25 04 07 41 40 90 00

判断是否已授权

选DF01 00 A4 00 00 02 df 01

二级分散 返回6982则为待授权

801A48011000000000000000000000000000000000

返回:9000-无需授权; 6982-需要授权

PSAM授权初始化

选DF01-选0017-读0017-选MF目录-选0015-读0015->
取随机数(4字节/8字节)

PSAM授权

外部认证 00 82 00 41[len code_buff[8]]
选DF01

ETC入口DSRC处理流程
1)BST预读OBU系统信息、0015文件
2)GetSecure读79字节车辆信息
3)TransferChannel读0002文件、0019文件
4)TransferChannel选择EF04、更新EF04 95字节(315-409字节)

EF04文件第315-353字节参照用户卡0019文件的第1-39字节填入入口信息,第354-373
字节写入用户卡0015文件第1-20字节,第374字节写入0015文件第41字节,第375字节
填写为0x01,第376-387字节填入0x00,第388-390字节填入0x00,第391-409字节填写
0x00。

5)TransferChannel复合消费初始化、更新0019文件(第40-43字节(一类交易累计金额)写入0x00)
6)TransferChannel复合消费、读余额
7)SetMMI
8)EventReport

ETC出口DSRC处理流程
1)BST预读OBU系统信息、0015文件
2)GetSecure读79字节车辆信息
3)TransferChannel读0002文件、0019文件
4)TransferChannel选择EF04、读取EF04 91字节(315-405)
5)TransferChannel复合消费初始化、更新0019文件
6)TransferChannel复合消费、读0002钱包余额
7)省份个数大于1时TransferChannel读EF04文件N字节(偏移405字节,读取4*通行省份个数字节),否则不执行本帧。
8)TransferChannel EF04文件第315-317字节、第406-485字节写入0x00
9)SetMMI
10)EventReport

在Linux上创建静态库的步骤

写源文件,通过 gcc -c xxx.c 生成目标文件。
用 ar 归档目标文件,生成静态库。
配合静态库,写一个使用静态库中函数的头文件。
使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。

gcc -c *.c
ar crv libmylib.a *.o

使用

gcc test.c -L. -lmylib

9000 正常 成功执行
6200 警告 信息未提供
6281 警告 回送数据可能出错
6282 警告 文件长度小于Le
6283 警告 选中的文件无效
6284 警告 FCI格式与P2指定的不符
6300 警告 鉴别失败
63Cx 警告 校验失败(x-允许重试次数)
6400 出错 状态标志位没有变
6581 出错 内存失败
6700 出错 长度错误
6882 出错 不支持安全报文
6981 出错 命令与文件结构不相容,当前文件非所需文件
6982 出错 操作条件(AC)不满足,没有校验PIN
6983 出错 认证方法锁定,PIN被锁定
6984 出错 随机数无效,引用的数据无效
6985 出错 使用条件不满足
6986 出错 不满足命令执行条件(不允许的命令,INS有错)
6987 出错 MAC丢失
6988 出错 MAC不正确
698D 保留
6A80 出错 数据域参数不正确
6A81 出错 功能不支持;创建不允许;目录无效;应用锁定
6A82 出错 该文件未找到
6A83 出错 该记录未找到
6A84 出错 文件预留空间不足
6A86 出错 P1或P2不正确
6A88 出错 引用数据未找到
6B00 出错 参数错误
6Cxx 出错 Le长度错误,实际长度是xx
6E00 出错 不支持的类:CLA有错
6F00 出错 数据无效
6D00 出错 不支持的指令代码
9301 出错 资金不足
9302 出错 MAC无效
9303 出错 应用被永久锁定
9401 出错 交易金额不足
9402 出错 交易计数器达到最大值
9403 出错 密钥索引不支持
9406 出错 所需MAC不可用
6900 出错 不能处理
6901 出错 命令不接受(无效状态)
61xx 正常 需发GET RESPONSE命令
6600 出错 接收通讯超时
6601 出错 接收字符奇偶错
6602 出错 校验和不对
6603 警告 当前DF文件无FCI
6604 警告 当前DF下无SF或KF

先用命令看看

ls -l /bin/sh

/bin/sh -> dash

切换sh为bash

sudo dpkg-reconfigure dash

然后选择否

ls -l /bin/sh

结果是/bin/sh -> bash

使用

sudo dpkg-reconfigure dash

然后选择是
把sh修改回dash