Java 不同SC系列的智能卡探测:清除SC状态的命令

Java 不同SC系列的智能卡探测:清除SC状态的命令,java,smartcard,Java,Smartcard,我想从不同供应商、不同用途、不同APDU的智能卡中了解一些基本信息。 例如:国家识别智能卡、EMV(支付)、手机SIM卡、javacard等 我编写了一个Java应用程序。 让我将SC系列称为A B C D E,并使用相同的名称调用5个子例程,每个子例程都具有正确的APDU,以读取一个特定SC系列的基本信息 不幸的是,我发布例程的顺序影响了成功的结果 示例:使用子程序顺序abcde,我可以读取abcdd类型的SC,而不是E 如果我将执行顺序更改为EABCD,我可以读取E,但现在我无法读取C类型的

我想从不同供应商、不同用途、不同APDU的智能卡中了解一些基本信息。 例如:国家识别智能卡、EMV(支付)、手机SIM卡、javacard等

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

不幸的是,我发布例程的顺序影响了成功的结果

示例:使用子程序顺序abcde,我可以读取abcdd类型的SC,而不是E

如果我将执行顺序更改为EABCD,我可以读取E,但现在我无法读取C类型的SC

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

是否有清除智能卡(和读卡器)状态的基本命令

那么子程序的执行顺序不会改变输出

A复位B复位C复位D复位等


是ATR吗?在每种SC上都是强制性的吗?

您描述的行为听起来很奇怪,因为智能卡读卡器不应该在不同的智能卡之间保持状态

然而,我不知道任何通用命令重新启动智能卡读卡器。例如,您可以使用专有的APDU
FF 70 07 6B 08 A2 06 A1 04 A9 02 83 00 00
(参见[7.6.3],尽管本指南称其适用于OMNIKEY 5022阅读器,但它适用于更多的OMNIKEY阅读器)。因此,对于您的读者,您必须研究互联网上类似的专有APDU


请记住,读卡器重新启动也很可能会导致USB读卡器重新枚举。

您描述的行为听起来非常奇怪,因为智能卡读卡器不应该在不同的智能卡之间保持状态

然而,我不知道任何通用命令重新启动智能卡读卡器。例如,您可以使用专有的APDU
FF 70 07 6B 08 A2 06 A1 04 A9 02 83 00 00
(参见[7.6.3],尽管本指南称其适用于OMNIKEY 5022阅读器,但它适用于更多的OMNIKEY阅读器)。因此,对于您的读者,您必须研究互联网上类似的专有APDU

请记住,读卡器重新启动也很可能会导致USB读卡器重新枚举。

您可以使用该方法重置卡(注意)

但是(IMHO)最好的方法是使用卡片ATR(如给出的)来猜测正确的卡片系列(如果可能的话)。这种方式也快得多。我使用这种方法演示了几种不同的非接触式卡产品,效果非常好


一些附加(随机)注释:

  • 研究所有家庭的文件——肯定有这样的行为的原因。试着跳过一些子程序和/或它们的APDU命令来锁定它

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

  • 大多数产品系列都有可靠的检测方法——如果有的话,请参阅文档

  • 如果以前调用的任何子例程使用
    选择
    更改所选应用程序/文件并成功,它将保持选中状态。考虑在每个子例程开始时使用显式<代码>选择< /代码>(例如选择期望的帮助或主文件)。

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

祝你好运

您可以使用该方法重置卡(注意)

但是(IMHO)最好的方法是使用卡片ATR(如给出的)来猜测正确的卡片系列(如果可能的话)。这种方式也快得多。我使用这种方法演示了几种不同的非接触式卡产品,效果非常好


一些附加(随机)注释:

  • 研究所有家庭的文件——肯定有这样的行为的原因。试着跳过一些子程序和/或它们的APDU命令来锁定它

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

  • 大多数产品系列都有可靠的检测方法——如果有的话,请参阅文档

  • 如果以前调用的任何子例程使用
    选择
    更改所选应用程序/文件并成功,它将保持选中状态。考虑在每个子例程开始时使用显式<代码>选择< /代码>(例如选择期望的帮助或主文件)。

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


祝你好运

这不应该发生。你用的是什么读卡器?您是否在不同的读卡器上观察到相同的行为?是的,两个不同的读卡器。忽略特定测试:哪种是重置读卡器和卡状态的通用方法?不应该发生这种情况。你用的是什么读卡器?您是否在不同的读卡器上观察到相同的行为?是的,两个不同的读卡器。忽略特定测试:哪种是重置读卡器和卡状态的通用方法?