智能卡通信协议t1

本文关键字:t1 通信协议 智能卡 | 更新日期: 2023-09-27 18:06:11

大家好,我还有一个问题要问你们。

我想与协议t=1的智能卡通信。我使用的是windows智能卡api (wincard .dll)和c#。我有

scardestabishcontext (), SCardListReaders(), SCardConnect(), SCardStatus(), SCardTransmit(), SCardDisconnect(), SCardReleaseContext()函数用于传输数据。

我想用下面的代码选择主文件(mf)
SCARD_IO_REQUEST sendreq,recvreq;
byte[] sendbuff = { 0x00, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00 };
sendreq.protocol = SCARD_PROTOCOL_T1;
sendreq.pciLength = 8;
recvreq.protocol = SCARD_PROTOCOL_T1;
recvreq.pciLength = 8;
byte[] RecvBuff = new byte[258];
int recvbufflen = 2;
SCardTransmit(hCard, ref sendreq, ref sendbuff[0], sendbuff.Length, ref recvreq, ref RecvBuff[0], ref recvbufflen);

响应必须为9000的成功任务,但我收到6A86(无效的ins参数)。

我的问题是:

1-为什么我收到这个响应?

2-如果是,我必须用pts命令更改协议吗?(卡只支持t1)

3-协议t = 1帧必须是序言字段+信息字段+尾声字段。但我不添加序言和尾声字节到sendbuff。有必要在使用Windows api时将它们添加到sendbuff吗?

谢谢. .

智能卡通信协议t1

我已经解决了这个问题,因为参数p1和p2。尽管收到"无效参数",我认为参数是正确的。所以我在其他地方寻找错误。

选择文件时,参数必须为0x02和0x0C。

编辑:在导游的评论后,我意识到我没有使用这些参数来选择主文件。(尝试过,但后来更改)在MF下选择EF:

byte[] sendbuff = {0x00, 0xA4, 0x02, 0x0C, 0x02, id1, id2}

感谢guidot..