c# - 如何从 C# 中的智能卡读取名称和地址等基本数据?

标签 c# smartcard pcsc

我想从德国保险健康卡 (egK) 中读取姓名、地址等基本数据。 我有一个 scm sdi011 读卡器,我使用 c#。 我已经从卡片/读卡器获得了 ATR 字符串,但我不知道如何继续。 如果有人能告诉我现在该怎么做,那就太好了。

这是我的代码:

    WinSCard card = new WinSCard();
    try {
       card.EstablishContext();
       card.ListReaders();
       string szReader = card.ReaderNames[1];
       card.Connect(szReader);
       string ATRStr = card.AtrString;
       ATRBox.Text = ATRStr;
    } catch (WinSCardException exception) {
       richTextBox1.Text = exception.WinSCardFunctionName + " Error 0x" + exception.Status.ToString("X08") + ": " + exception.Message;
    } finally {
       card.Disconnect();
    }

最佳答案

大致顺序如下(我省略了扩展长度和访问权限):

  • 选择合适的DF
  • 选择文件EF.PD
  • 发送一系列Read Binary命令,增加在 P1/P2 中编码的偏移量

在下面的方括号中表示可选部分。

sendbuffer 必须包含命令 APDU,i。 e. CLA、INS、P1、P2、[LC、数据]、[LE] 最简单的方法是指定 LE=0,从那时起卡会发送尽可能多的数据,您就会知道将 P1/P2 递增到哪个值。

答案包含[数据] SW1/SW2,因此至少应返回两个字节。如果你得到的更少,这可能表明你的命令格式不正确并被 winscard 直接拒绝,而没有发送到卡。

关于c# - 如何从 C# 中的智能卡读取名称和地址等基本数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535827/

相关文章:

c# - 如何从代码 (.xaml.cs) 打开 Material 设计对话框?

c# - 如何读取金雅拓智能卡的序列号?

ide - 使用 Javacard 开始智能卡编程所需的东西

javascript - CCID 插槽状态字节

linux - 使用 PCSCD 时出现 ACR122U 错误

c# - 在 C# Word Interop 中调用命令 Document.BeforeSave

c# - 带有 OAuthBase.cs 的雅虎 Oauth API

c# - Windows.Forms,显示非模式状态下的禁用表单

nfc - 从模拟卡中检测出真正的 Mifare 经典卡

android - 通过 Android USB 主机与智能卡读卡器通信