解锁后无法在 JavaCard 中列出或安装 CAP 文件为什么?以及如何解决?

问题描述

我有一个 SmartCafe JavaCard。我能够解锁它,但我无法在它上面运行任何命令。 我还能尝试什么?

也许是因为协议?但我没有找到改变协议的方法。你有什么别的想法吗

gp -dvl
#
# gp -dvl
[DEBUG] TerminalManager - Selected the only reader with a card
SCardConnect("Identiv uTrust 4701 F Contact Reader 0",T=*) -> T=1,3BF71800008031FE45736674652D6E66C4
# GlobalPlatformPro 325fe84
# Running on Windows 10 10.0 amd64,Java 11.0.11 by Oracle Corporation
A>> T=1 (4+0000) 00A40400 00
A<< (0018+2) (54ms) 6F108408A000000003000000A5049F6501FF 9000
[DEBUG] GPSession - Auto-detected ISD: A000000003000000
Warning: no keys given,defaulting to 404142434445464748494A4B4C4D4E4F
[INFO] GPSession - Using card master keys with version 0 for setting up session [MAC]
A>> T=1 (4+0008) 80500000 08 9ECABDC6C1A59FEB 00
A<< (0028+2) (120ms) 0000216196005964450501020003ED298A383ECE2F1E4CA8EB811E95 9000
[DEBUG] GPSession - SSC: 0003
[DEBUG] GPSession - Host challenge: 9ECABDC6C1A59FEB
[DEBUG] GPSession - Card challenge: 0003ED298A383ECE
[DEBUG] GPSession - Card reports SCP02 with key version 1 (0x01)
[INFO] GPSession - diversified card keys: ENC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) MAC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) DEK=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) for SCP02
[INFO] GPSession - Session keys: ENC=C39AC2D18F94A22B14C04DBB8CF69B7F MAC=D527FB5519C316C9C876E016D80BAEBA RMAC=598ECF7C266BA87DEA24D380AFAFE069
[DEBUG] GPSession - Verified card cryptogram: 2F1E4CA8EB811E95
[DEBUG] GPSession - Calculated host cryptogram: BA9CC3E1E77BF363
A>> T=1 (4+0016) 84820100 10 BA9CC3E1E77BF3634913ED6DF33F8FEA
A<< (0000+2) (46ms) 9000
A>> T=1 (4+0010) 84F28002 0A 4F0056F974428777BDCE 00
A<< (0000+2) (49ms) 6A86
A>> T=1 (4+0010) 84F28000 0A 4F006C54999C15CDD096 00
A<< (0011+2) (52ms) 08A000000003000000079E 9000
Error: At position 1 the len is more then 3 [32]
java.lang.IllegalStateException: At position 1 the len is more then 3 [32]
        at com.payneteasy.tlv.BerTlvParser.getDataLength(BerTlvParser.java:205)
        at com.payneteasy.tlv.BerTlvParser.parseWithResult(BerTlvParser.java:85)
        at com.payneteasy.tlv.BerTlvParser.parse(BerTlvParser.java:53)
        at com.payneteasy.tlv.BerTlvParser.parse(BerTlvParser.java:44)
        at pro.javacard.gp.GPRegistry.populate_tags(GPRegistry.java:151)
        at pro.javacard.gp.GPRegistry.parse_and_populate(GPRegistry.java:211)
        at pro.javacard.gp.GPSession.getStatus(GPSession.java:1022)
        at pro.javacard.gp.GPSession.getRegistry(GPSession.java:963)
        at pro.javacard.gp.GPTool.run(GPTool.java:665)
        at pro.javacard.gp.GPTool.main(GPTool.java:107)
SCarddisconnect("Identiv uTrust 4701 F Contact Reader 0",true) tx:72/rx:67

解决方法

相互认证成功:

A>> T=1 (4+0016) 84820100 10 BA9CC3E1E77BF3634913ED6DF33F8FEA A

但是 GET STATUS 命令失败:

84F28002 0A 4F0056F974428777BDCE 00 A> T=1 (4+0010) 84F28000 0A 4F006C54999C15CDD096 00 A

第一个 GET STATUS 命令以新格式搜索颁发者安全域,但收到“不正确的参数 P1、P2”作为响应。

第二个命令尝试读取相同的内容,但采用旧格式。此处收到了响应,但 gp 似乎对结果 08A000000003000000079E 存在解析错误。

解析结果应该是:

08 - 长度 A000000003000000 - 援助 07 - 生命周期状态 = 卡已初始化 9E - 应用权限

请为 gp 工具提出问题。修复它应该很容易。

在此问题未解决的情况下,您能否尝试使用替代工具来完成您的任务?我是 GPShell 的作者,根据代码库,我认为至少不应发生此错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...