【问题标题】:SmartCard ATR change not reflected in code智能卡 ATR 更改未反映在代码中
【发布时间】:2014-07-15 09:21:32
【问题描述】:

我正在使用 C++ (Windows API) 和 Java 的 SmartCard API。

我在删除操作系统后获取 ATR 时遇到问题。 我的应用程序是从智能卡中删除操作系统。当操作系统被删除时,卡的 ATR 发生了变化,但它没有反映在我的代码中。删除操作系统后,我仍然得到相同的 ATR,但是当我重新启动我的应用程序时,它显示正确的 ATR。

我的代码片段。

CardConnect();
getATR(); //get correct ATR
eraseOS(deleteOScmd,size); //Erasing OS

CardConnect(); //again connecting
getATR();      // againg try to get ATR but shows same as first call. 

Java 代码也是如此。我想显示新的 ATR,但无法获得更新的 ATR。

有人可以帮助我吗? 谢谢。

【问题讨论】:

    标签: java c++ smartcard


    【解决方案1】:

    通过删除操作系统,您与智能卡的任何标准用途相去甚远,因此任何解释都是可能的。读卡器、智能卡读卡器驱动程序、资源管理器或其他任何人都可以依赖这样一个事实,即在没有插入新智能卡的情况下,旧 ATR 仍然有效,并且只需提供先前数据的缓存副本。 (请注意,除了 ATR 的历史字节外,所有字节都与卡和读卡器之间的通信相关,没有理由进行更改)。在现实生活中,允许诸如擦除操作系统之类的事情发生是非常危险的。

    我怀疑,您为 ATR 附加了一个含义,最好将其放入用户数据对象中。

    【讨论】:

    • OS在这种情况下是什么意思,我无法想象它是卡的操作系统。
    • @Niall 我假设它是操作系统(默认应用程序或类似的基础),因为任何小事都无法解释,为什么 ATR 会因此而改变。
    • 好的,操作系统部分没有响起任何铃声。我知道的任何数据对象。他没有说getATR 做了什么,但是 IIRC,在 Windows 上,卡需要在再次重新开机之前明确关机;因此,如您所述,如果未重新启动,则将返回缓存的 ATR。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多