gpt4 book ai didi

c++ - 如何将 ATR 发送到卡

转载 作者:太空宇宙 更新时间:2023-11-04 13:51:12 25 4
gpt4 key购买 nike

我有一些卡,想从中获取 ATR(使用某些 SDK 中的方法)。实现看起来像这样:

unsigned char ATR[128]={0};
int len=33;
int maxlen=33;
ret = sd7816_ATR(0,1,ATR,len,maxlen,1);

sd7816_ATR 函数的第一个、第二个和最后一个参数应该是这样的。我尝试将长度字段更改为不同的值,包括 0 但没有帮助。

我担心的是我发送的 ATR 字符串一开始是空的,我期待调用完成后要写入其中的内容(实际上返回成功)。

但调用后 ATR 仍然是空的..这里可能出了什么问题?

(我想知道卡是 ISO/IEC 14443 还是 ISO/IEC 7816 类型)。

最佳答案

您正在尝试接收特定于 ISO/IEC 7816-3 接触式卡片的命令的 ATR。在这种特殊情况下,这是从(SIM 形式)SAM 读卡器请求的。但是,您正在尝试读出非接触式阅读器。

现在非接触式卡没有 ATR。有些卡确实有 ATS(即 ISO/IEC 14443 A 类卡),但应该通过类似的 14443 SELECT 命令请求。一些卡片,特别是 B 类卡片,包含一个 EF.ATR 以弥补 ATR 中的(空间)不足。尽管如此,ATR/ATS 的卡片识别功能仍然有限。

ISO/IEC 7816 由几个部分组成:第 1 至 3 部分描述了接触式卡,第 4 部分及更高部分描述了处理器卡的应用级 APDU 命令和文件结构。如果您的非接触式卡实现 ISO/IEC 7816-4,那么您通常也可以直接使用 PCSC 接口(interface)向卡发送 APDU 或从卡接收 APDU。

一般情况下,阅读器仅适用于接触式或非接触式。如果您的读卡器同时包含接触式和非接触式操作,那么它们通常会在操作系统中显示为两个不同的读卡器。所以一般来说,如果你了解读卡器,你就知道该卡是接触式卡还是非接触式卡。

操作系统可能无法将 SAM 插槽识别为读取器 - 您可能只能使用低级接口(interface)访问它们。它们主要用作来自终端/检查系统/接口(interface)设备或读出卡的系统的任何名称的 key 的安全存储。

关于c++ - 如何将 ATR 发送到卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295265/

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