T = 0和T = 1并获取响应命令关系?

时间:2015-12-26 07:25:33

标签: javacard

我有一个安装了applet的Java Card,当我向其发送00 40 00 00时会返回以下响应:

Connect successful.
Send: 00 40 00 00
Recv: 61 32
Time used: 15.000 ms

Send: 00 C0 00 00 32
Recv: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 90 00
Time used: 15.000 ms

我使用的工具(PyAPDUTool),有一个标记为" Auto Get Response"的选项。当我选中此选项时,我不再需要发送获取响应命令(00 c0 00 00 32):

Send: 00 40 00 00
Recv: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 90 00
Time used: 15.000 ms

好。现在我希望在另一个Java Card上有上述行为。所以我写了以下程序:

package testPrjPack;

import javacard.framework.*;

public class TestPrj extends Applet
{
    public static byte[] data = {(byte)0x01 ,(byte)0x02 ,(byte)0x03 ,(byte)0x04 ,(byte)0x05 ,(byte)0x06 ,(byte)0x07 ,(byte)0x08 ,(byte)0x09 ,(byte)0x0A ,(byte)0x0B ,(byte)0x0C ,(byte)0x0D ,(byte)0x0E ,(byte)0x0F ,(byte)0x10 ,(byte)0x11 ,(byte)0x12 ,(byte)0x13 ,(byte)0x14 ,(byte)0x15 ,(byte)0x16 ,(byte)0x17 ,(byte)0x18 ,(byte)0x19 ,(byte)0x1A ,(byte)0x1B ,(byte)0x1C ,(byte)0x1D ,(byte)0x1E ,(byte)0x1F ,(byte)0x20 ,(byte)0x21 ,(byte)0x22 ,(byte)0x23 ,(byte)0x24 ,(byte)0x25 ,(byte)0x26 ,(byte)0x27 ,(byte)0x28 ,(byte)0x29 ,(byte)0x2A ,(byte)0x2B ,(byte)0x2C ,(byte)0x2D ,(byte)0x2E ,(byte)0x2F ,(byte)0x30 ,(byte)0x31 ,(byte)0x32};

    public static void install(byte[] bArray, short bOffset, byte bLength) 
    {
        new TestPrj().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }

    public void process(APDU apdu)
    {
        if (selectingApplet())
        {
            return;
        }

        byte[] buf = apdu.getBuffer();
        switch (buf[ISO7816.OFFSET_INS])
        {
        case (byte)0x40:
            ISOException.throwIt((short)0x6132);            
            break;
        case (byte)0xC0:
            Util.arrayCopyNonAtomic(data,(short)0, buf, (short)0, (short)0x32);
            apdu.setOutgoingAndSend((short)0,(short)0x32);
            break;
        default:
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }

}

在新Java卡上安装 .cap 文件后,我对选中并取消选中自动获取响应选项的响应如下:

enter image description here

如上所述,自动获取响应不再有效,我需要手动发送获取响应命令。

我很想知道这个工具或我的程序有什么问题?问题与通信协议有关吗? (第一张卡使用T=0,第二张卡使用T=1)。

1 个答案:

答案 0 :(得分:1)

没有错。 T = 1根本就没有使用GET RESPONSE,因此Python没有理由自动处理它。

重要提示:请注意,Java Card 会自动处理GET RESPONSE,因此您永远不必明确地实现它。