本示例使用的发卡器https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.47b32c1bYhQfgOfttid1076313398047一、将CPU用户卡的认证密钥存入PSAM卡内将已选定的PSAM卡 进行复位 PSAMCard SendData00 A4 00 00 02 3F 00 //PSAM卡选择MF PSAMCard Receive 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 03 88 01 01 90 00 PSAMCard SendData00 84 00 00 04 //PSAM卡取4字节随机数 PSAMCard Receive 29 F6 66 4E 90 00 //对4字节随机数 29 F6 66 4E 、FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 进行外部加密得到AE 0F 04 2F 54 23 A1 5C PSAMCard SendData00 82 00 00 08 AE 0F 04 2F 54 23 A1 5C PSAMCard Receive 90 00 //外部认证 成功 PSAMCard SendData80 E0 16 80 0D 38 05 20 F0 F0 95 FF FF 44 44 46 30 31 //在PSAM卡上新建DF: 16 80 DF 可以是任何有效值不需要与CPU卡的DF 一致。 PSAMCard Receive 90 00 PSAMCard SendData00 A4 00 00 02 16 80 //选择新建的DF:16 80 PSAMCard Receive 6F 07 84 05 44 44 46 30 31 90 00 PSAMCard SendData80 E0 00 00 07 3F 00 B0 01 F0 FF FF //创建密钥文件 PSAMCard Receive 90 00 PSAMCard SendData80 D4 01 00 15 30 F0 F0 F0 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF //加入一个内部认证密钥密钥ID00密钥类型30测试密钥FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 按此方法将所有认证密钥存入PSAM卡 PSAMCard Receive 90 00二、CPU卡发卡创建一个可读写的二进制文件激活发卡器上的CPU卡 Cpu Card SendData00 A4 00 00 02 3F 00 //选择CPU卡MF Cpu Card Receive 6F 10 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 90 00 Cpu Card SendData80 0E 00 00 00 //删除MF下所有文件 Cpu Card Receive 90 00 Cpu Card SendData80 E0 00 00 07 3F 00 B0 01 F0 FF FF //创建密钥文件 Cpu Card Receive 90 00 Cpu Card SendData80 D4 01 00 15 39 F0 F0 AA 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF //装载0号密钥 Cpu Card Receive 90 00 Cpu Card SendData80 E0 16 80 0D 38 05 20 F0 F0 95 FF FF 44 44 46 30 31 //创建一个新应用DF16 80 Cpu Card Receive 90 00 Cpu Card SendData00 A4 00 00 02 16 80 //选择刚才新建的应用DF16 80 Cpu Card Receive 6F 07 84 05 44 44 46 30 31 90 00 Cpu Card SendData80 E0 00 00 07 3F 00 B0 01 F0 FF FF //创建密钥文件 Cpu Card Receive 90 00 Cpu Card SendData80 D4 01 0C 15 39 F0 F0 CC 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF //装载0C号密钥 Cpu Card Receive 90 00 Cpu Card SendData80 E0 00 04 07 28 01 00 76 77 FF FF //创建一个新的二进制文件文件ID04文件大小01 00只读权限76读写权限77 Cpu Card Receive 90 00 Cpu Card SendData80 D4 01 06 15 39 F0 76 66 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF //装载06号密钥密钥类型39外部认证密钥使用权限F0更改权限76后续寄存器状态值6错误计数器516字节密钥FF Cpu Card Receive 90 00 Cpu Card SendData80 D4 01 07 15 39 F0 77 77 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF //装载07号密钥密钥类型39外部认证密钥使用权限F0更改权限77后续寄存器状态值7错误计数器516字节密钥FF Cpu Card Receive 90 00三、通过PSAM卡内部加密认证不需要暴露卡片密钥读、写CPU卡内文件激活发卡器上的CPU卡 Cpu Card SendData00 A4 00 00 02 3F 00 //选择CPU卡MF Cpu Card Receive 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 03 88 01 01 90 00 Cpu Card SendData00 A4 00 00 02 16 80 //选择CPU卡DF: 16 80 Cpu Card Receive 6F 18 84 05 47 5A 52 53 30 A5 0F 9F 08 01 02 9F 0C 08 01 3F 00 00 00 00 00 00 90 00 Cpu Card SendData00 A4 00 00 02 00 04 //选择当前应用内的 4号二进制文件 Cpu Card Receive 90 00 Cpu Card SendData00 84 00 00 08 Cpu Card Receive A2 F7 44 61 10 31 8B FC 90 00 //取8字节随机数A2 F7 44 61 10 31 8B FC PSAMCard SendData00 A4 00 00 02 3F 00 //选择PSAM卡的MF PSAMCard Receive 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 03 88 01 01 90 00 PSAMCard SendData00 A4 00 00 02 16 80 //选择PSAM卡内的DF PSAMCard Receive 6F 0D 84 05 44 44 46 30 31 A5 04 9F 08 01 02 90 00 PSAMCard SendData00 88 00 00 08 A2 F7 44 61 10 31 8B FC //使用密钥ID00 对CPU卡获取到的随机数A2 F7 44 61 10 31 8B FC 进行内部加密得到14 10 04 08 48 99 70 C3 PSAMCard Receive 14 10 04 08 48 99 70 C3 90 00 Cpu Card SendData00 82 00 07 08 14 10 04 08 48 99 70 C3 //CPU卡使用PSAM卡提供的密钥 认证 7号密钥7号密钥是可读、可写认证密钥 Cpu Card Receive 90 00 Cpu Card SendData00 B0 00 00 00 //认证成功读取CPU卡文件数据 Cpu Card Receive 44 44 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 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 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 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 Cpu Card SendData00 D6 00 00 05 44 44 00 00 00 //改写CPU卡文件数据 Cpu Card Receive 90 00