gpt4 book ai didi

java - 使用不同 SC 系列的智能卡探测 : command to clean the SC state

转载 作者:行者123 更新时间:2023-12-02 02:48:11 27 4
gpt4 key购买 nike

我希望从不同供应商、不同用途、不同 APDU 的一堆智能卡中读取一些基本信息。例如:国家身份识别智能卡、EMV(支付)、手机SIM、javacard等...

我编写了一个 Java 应用程序。让我将 SC 系列称为 A B C D E,并使用相同的名称命名 5 个子例程,每个子例程都具有正确的 APDU 来读取特定 SC 系列的基本信息。

不幸的是,我发出例程的顺序会影响成功的结果。

示例:使用子程序顺序 A B C D E,我可以读取 A B C D 类型的 SC,而不是 E。

如果我将执行顺序更改为 E A B C D,我可以读取 E,但现在我会失败并读取类型为 C 的 SC。

我理解:一些 SC 丢弃外部 APDU ...其他 SC“挂起”。

是否有一个基本命令来清理智能卡(和读卡器)的状态?

所以子例程的执行顺序不会改变输出?

A重置B重置C重置D重置等等...

是 ATR 吗?对于每种 SC 都是强制的吗?

最佳答案

您可以使用Card.disconnect()重置卡的方法(注意this)。

但是(恕我直言)最好的方法是使用卡 ATR(由 Card.getATR() 给出)来猜测正确的卡系列(如果可能)。这种方式也快得多。我在演示中使用了这种方法来处理几种不同的非接触式卡产品,效果非常好。

<小时/>

一些附加(随机)注释:

  • 研究所有家庭的文档——这种行为肯定是有原因的。尝试跳过一些子例程和/或其 APDU 命令来确定它。

  • 此外,某些 APDU 在意外发送时可能会导致问题(例如锁定的密码或锁定的身份验证尝试)。你应该知道自己在做什么。

  • 大多数产品系列都有某种方法可以可靠地检测 - 如果有,请参阅文档。

  • 如果任何先前调用的子例程使用SELECT 更改选定的应用程序/文件并成功,则它将保持选定状态。考虑在每个子例程的开头使用显式SELECT(例如选择预期的 AID 或主文件)。

  • DESFire 卡在接收到非 native 命令 APDU 时离开 native 模式并进入包装模式(这可能不是您的情况,因为您在使用 javax.smartcardio 时通常使用 ISO 包装命令)。

祝你好运!

关于java - 使用不同 SC 系列的智能卡探测 : command to clean the SC state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com