如何读取基本数据,如名称&用c#从智能卡获取地址

本文关键字:地址 获取 智能卡 何读取 读取 数据 | 更新日期: 2023-09-27 18:03:58

我想从德国保险健康卡(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();
    }

如何读取基本数据,如名称&用c#从智能卡获取地址

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

  • 选择合适的DF
  • 选择文件EF。PD
  • 发送一个Read Binary命令序列,递增的偏移量编码在P1/P2

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

sendbuffer必须包含命令APDU,即CLA, INS, P1, P2, [LC, data], [LE]最简单的方法是指定LE=0,因为这样卡片就会发送尽可能多的东西,并且你有一个想法,通过哪个值来增加P1/P2。

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