二、 圈存命令
1、选择3F01目录
Send Data : 00 A4 00 00 02 3F 01
RSP[88]: 6F 54 84 09 A0 00 00 00 03 86 98 07 01 A5 47 9F 08 01 02 9F 0C 40 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
2、取8字节随机数
Send Data :0084000008
RSP[10]: 9B 36 1B 26 CB 9F A8 C8 90 00
3、对随机数进行3DES加密
加密数据:9B 36 1B 26 CB 9F A8 C8
加密密钥:39393939393939393939393939393939(3F01目录外部认证密钥)
4、外部认证
Send Data :008200000897F557D8EDE97F95
RSP[2]:9000
5、校验pin码
Send Data : 00 20 00 00 03 12 34 56
Recv Data : 90 00
6、读余额
Send Data : 80 5C 00 02 04
RSP[6]: 00 00 00 00 90 00
7、初始化圈存
Send Data : 80 50 00 02 0B 0000001234000000000001
RSP[18]: 00 00 00 00 00 00 00 01 F9 CA BA 91 6C 39 4D 64 90 00
电子存折或电子钱包旧余额 00000000
电子存折或电子钱包联机交易序号0000 (注意交易序号每次会变化)
密钥版本号:00
算法标识:01
伪随机数:F9 CA BA 91
MAC1: 6C 39 4D 64
算法标识
00-3DES
01-DES
02-255保留
计算过程密钥
过程密钥由DATA中第一字节即密钥标识符指定的圈存密钥对(4字节随机数+2字节电子存折或电子钱包联机交易序号+8000)3DES数据加密生成
密钥: 3F013F013F013F013F013F013F013F01
数据:F9 CA BA 91 00 00 80 00
加密结果:03 01 5B EA 34 7E A2 31
计算MAC1
MAC1由过程密钥对(4字节电子存折或电子钱包旧余额+4字节交易金额+1字节交易类型+6字节终端机编号)DES数据加密生成
交易类型:
旧余额:00000000
交易金额:00001234
交易类型:
01-电子存折圈存
02-电子钱包圈存
终端机编号:000000000001
KEY: 03 01 5B EA 34 7E A2 31
INITDATA: 0000000000000000
DATA: 000000000000123402000000000001
MAC的高4位和卡片返回的MAC1相等,证明命令执行正确
计算圈存命令中的MAC2
MAC2由过程密钥对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成
交易金额:00001234
交易类型:02
终端机编号:000000000001
交易日期:20180805
交易时间:164522
密钥:03 01 5B EA 34 7E A2 31
初始向量: 0000000000000000
数据 : 000012340200000000000120180805164522
取前4个字节:
MAC2 = 7F4F6613
7、圈存
Send Data : 80 52 00 00 0B 201808051645227F4F6613
RSP[6]: F7 C1 CC 20 90 00
返回的交易验证TAC码:
F7 C1 CC 20
验证TAC码
TAC码由TAC密钥左右8字节异或运算的结果对(4字节电子存折或电子钱包新余额+2字节电子存折或电子钱包联机交易序号+4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成
新余额:00001234
交易序号:0000
交易金额:00001234
交易类型标识:02
终端机编号:000000000001
交易日期:20180805
交易时间:164522
内部密钥为:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
TacKey.Left(8) = 3434343434343434
TacKey.Right(8) = 3434343434343434
XOR 结果 = 0000000000000000
密钥: 0000000000000000
初始向量: 0000000000000000
数据: 000012340000000012340200000000000120180805164522
计算结果MAC高4字节与卡片返回的TAC相同,圈存成功
8、读余额
Send Data : 80 5C 00 02 04
RSP[6]: 00 00 12 34 90 00