连接智能卡

时间:2011-03-23 11:51:24

标签: c# frameworks smartcard apdu smartcard-reader

我正在尝试使用A Smart Card Framework for .NET通过CryptoTech SCR3310签署文档。 我使用第二篇文章(SmartcardFmwk)中的demo。 发送APDUCommand时,我会收到如下错误:

  • 用于验证(新的APDUCommand(0x00, 0x20,0,1,null,0))SW1= 69 SW2=83 (Authentication method blocked) ErrorNr1
  • 用于选择文件(新的 APDUCommand(0x00,0xA4,0,0,null, 0))[SW = 61 SW2 = 2E] [4] ErrorNr2
  • 获得回复(新的 APDUCommand(0x00,0xC0,0,0,null, 0))SW = 68 00 ErrorNr3

CODE:

APDUCommand apduVerifyCHV = new APDUCommand(0x00, 0x20, 0, 1, null, 0)
APDUCommand apduSelectFile = new APDUCommand(0x00, 0xA4, 0, 0, null, 0)
APDUResponse apduResp;

CardNative iCard = new CardNative();
iCard.Connect(readers[0], SHARE.Shared, PROTOCOL.T0orT1); //connected
Console.WriteLine("Connects card on reader: " + readers[0]);

// Verify the PIN  (PIN = 12341234)
byte[] pin = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x31, 0x32, 0x33, 0x34 }; 

APDUParam apduParam = new APDUParam();
apduParam.Data = pin;
apduVerifyCHV.Update(apduParam);
apduResp = iCard.Transmit(apduVerifyCHV); //ErrorNr1

// Select the MF (3F00)
apduParam.Data = new byte[] { 0x3F, 0x00 };
apduSelectFile = new APDUCommand(0x00, 0xA4, 0, 0, apduParam.Data, 0);

apduSelectFile.Update(apduParam);
apduResp = iCard.Transmit(apduSelectFile); //ErrorNr2
apduGetResponse.Update(apduParam);
apduResp = iCard.Transmit(apduGetResponse); //ErrorNr3

我该怎么做才能摆脱这些错误? 我用另一个程序测试了卡,没有错误。

可能是APDUCommand参数错误。你觉得怎么样?

2 个答案:

答案 0 :(得分:1)

如果此卡与其他程序一起正常工作,那么关键是要为APDU命令设置适当的参数。我从来没有这样做,但我的朋友有一些与学生证有关的大学项目。他向我提供了以下链接,其中包含已知的APDU命令列表。不知道,也许它会帮助你找到正确的组合。

APDU table

答案 1 :(得分:1)

  • 问题中的智能卡读卡器不相关,它是的网关设备。您的错误不是来自读者,而是来自
  • 您真的需要有一张卡片手册,或者您可以尝试ISO 7816-4
  • 的命令
  • 调用GET RESPONSE通常意味着使用T = 0协议,您使用T = 0或T = 1连接,对于支持它的现代卡,默认为T = 1。