将 APDU 从协议 T=0 转换为智能卡到 T=1
Convert APDU to SmartCard from protocolo T=0 to T=1
我正在为智能卡开发应用程序,当我使用 T=0 协议时,应用程序运行完美,但对于 T=1 SCardTransmit 函数 returns
invalid parameters ERROR 80100004.
我的问题是两个协议的矢量格式相同或更改矢量格式?
public void Trasmision()
{
**Byte[] vectorSend = { 0x00, 0xa4, 0x04, 0x00, 0x00, 0x6f, 0x65 };**
UInt32 inT2 = (UInt32)vectorSend.Length;
vectorIn = new Byte[254];
UInt32 inT = (UInt32)vectorIn.Length;
IntPtr PT1 =GetPciT0() ;
this.rTransmit = SCardTransmit(this.hContext, GetPciT1(), vectorSend, inT2, request, vectorIn, inT);
}
虽然 T=0 只知道必须根据命令情况分析的 P3,但 T=1 区分命令数据长度的 LC 和响应长度的 LE。请注意,LE 必须遵循命令数据字段。
虽然我不知道 C# API,但我猜问题出在 6F 之前的 00。这不可能是 LC(因为我假设 6F 65 是命令数据,因此它应该读取 02),就目前而言,它将被解释为 6F 65 的 LC 的扩展长度指示,但后面没有命令数据。
我正在为智能卡开发应用程序,当我使用 T=0 协议时,应用程序运行完美,但对于 T=1 SCardTransmit 函数 returns
invalid parameters ERROR 80100004.
我的问题是两个协议的矢量格式相同或更改矢量格式?
public void Trasmision()
{
**Byte[] vectorSend = { 0x00, 0xa4, 0x04, 0x00, 0x00, 0x6f, 0x65 };**
UInt32 inT2 = (UInt32)vectorSend.Length;
vectorIn = new Byte[254];
UInt32 inT = (UInt32)vectorIn.Length;
IntPtr PT1 =GetPciT0() ;
this.rTransmit = SCardTransmit(this.hContext, GetPciT1(), vectorSend, inT2, request, vectorIn, inT);
}
虽然 T=0 只知道必须根据命令情况分析的 P3,但 T=1 区分命令数据长度的 LC 和响应长度的 LE。请注意,LE 必须遵循命令数据字段。
虽然我不知道 C# API,但我猜问题出在 6F 之前的 00。这不可能是 LC(因为我假设 6F 65 是命令数据,因此它应该读取 02),就目前而言,它将被解释为 6F 65 的 LC 的扩展长度指示,但后面没有命令数据。