如何使用java卡apdu从智能卡写入和读取数据

如何使用java卡apdu从智能卡写入和读取数据,java,byte,smartcard,javacard,apdu,Java,Byte,Smartcard,Javacard,Apdu,我已经编写了一个小程序,并将其安装在智能卡中。但我不知道如何读写数据到智能卡 private void readName(APDU apdu) throws ISOException { byte[] apduBuffer = apdu.getBuffer(); for (byte i=0; i<userName.length; i++) { apduBuffer[5+i] = userName[(byte)i] ; } apdu.s

我已经编写了一个小程序,并将其安装在智能卡中。但我不知道如何读写数据到智能卡

private void readName(APDU apdu) throws ISOException
{
    byte[] apduBuffer = apdu.getBuffer();
    for (byte i=0; i<userName.length; i++)
    {
        apduBuffer[5+i] = userName[(byte)i] ;
    }
    apdu.setOutgoing();
    apdu.setOutgoingLength((short)userName.length);
    apdu.sendBytes((short)5, (short)userName.length);
}
private void readName(APDU APDU)引发异常
{
字节[]apduBuffer=apdu.getBuffer();

对于(字节i=0;i您的卡是非接触式的或非接触式的。既然您说您已经安装了小程序,我假设您有卡的钥匙

如果是这样,为了与您的卡进行通信,您需要执行以下操作:

  • 首先向安装小程序的安全域进行身份验证
  • 选择小程序的辅助工具
  • 使用“发送”将数据发送到小程序
  • 在响应中,您将看到从小程序发送的字节:

    apdu.setOutgoingLength((short)userName.length);
    apdu.sendBytes((short)5, (short)userName.length);
    

    如果您还需要更多信息,您需要提供更多有关您试图完成的任务的详细信息。

    您的卡是非接触式或接触式的。既然您说您已经安装了小程序,我想您已经拥有该卡的钥匙了

    如果是这样,为了与您的卡进行通信,您需要执行以下操作:

  • 首先向安装小程序的安全域进行身份验证
  • 选择小程序的辅助工具
  • 使用“发送”将数据发送到小程序
  • 在响应中,您将看到从小程序发送的字节:

    apdu.setOutgoingLength((short)userName.length);
    apdu.sendBytes((short)5, (short)userName.length);
    


    如果您还需要什么,您需要提供更多关于您试图完成的任务的详细信息。

    我找到了解决方案。实际上,我正在使用eclipse作为编辑器,java卡插件安装在其中。当我在智能卡上运行程序时,它每次都在以前的小程序上安装最新的小程序。要查看结果,我们可以使用pyapdu工具,它非常好。感谢所有的响应。

    我找到了解决方案。实际上,我正在使用eclipse作为编辑器,其中安装了java卡插件。当我在智能卡上运行程序时,每次都会在以前的小程序上安装最新的小程序。要查看结果,我们可以使用pyapdu工具,它非常好。感谢所有的响应。

    我假设您不想读写e来自智能卡的数据-相反,您询问如何将数据从主机发送到卡上的小程序,并在卡上处理后将响应数据发送回主机应用程序。是的,您能告诉我怎么做吗?我假设您不想从智能卡读写数据-相反,您询问如何从ho发送数据将st发送到卡上的小程序,并在卡上处理后将响应数据发送回主机应用程序。是的,您能否告诉我如何执行此操作。问题是,当我第二次向小程序发送数据时,它会覆盖以前数据上的数据?并告诉我如何从小程序读取数据?无论何时向小程序发送数据,小程序的处理方法都会随之改变使用APDU将被调用。因此在这个过程方法中,您将存储您想要的任何数据。您能告诉您正在使用的环境是什么吗?-什么类型的卡(接触/非接触),它是制造商、GP版本支持、您正在使用的读卡器以及您是否正在尝试通过J2SE上的PC/SC进行通信等。完整的代码和有关您尝试完成的内容的更多信息?@KiranKuppa在执行SELECT之前,通常不需要向安全域进行身份验证,SELECT使身份验证实际上是一个安全域这是毫无意义的,因为安全域将被取消选择。@owlstead哦,是的,可能不需要向SD进行身份验证。但通常,开发的商业应用程序的安全级别将由SD定义用于外部通信。我个人从未遇到过不需要执行的情况与SDDU的相互验证问题是,当我第二次向小程序发送数据时,它会覆盖以前数据上的数据?并告诉我如何从小程序中读取数据?无论何时向小程序发送数据,都会调用小程序的处理方法以及APDU。因此,在这个处理方法中,您将存储您想要存储的任何数据。您能告诉我你工作的环境是什么?-什么样的卡(接触式/非接触式),它是制造商、GP版本支持、您正在使用的读卡器以及您是否正在尝试通过J2SE上的PC/SC进行通信等。完整的代码和有关您尝试完成的内容的更多信息?@KiranKuppa在执行SELECT之前,通常不需要向安全域进行身份验证,SELECT使身份验证实际上是一个安全域这是毫无意义的,因为安全域将被取消选择。@owlstead哦,是的,可能不需要向SD进行身份验证。但通常,开发的商业应用程序的安全级别将由SD定义用于外部通信。我个人从未遇到过不需要执行的情况与SDI共同认证我不太明白这个答案(实际上,我也不太明白你的问题)你在使用什么插件?什么是pyapdu工具?我在Eclipse中安装了JAVACARD插件和JCOP插件。当我试图用硬件运行一个程序时,它用以前的小程序替换了我最新的小程序。所以每次运行程序时,我都会在智能卡中丢失数据,不知道我的程序是否工作。为此,我找到了一个显示从智能卡中删除数据。然后我知道程序正在工作。好的,现在对我来说这是有意义的。感谢您回复Sachin。当您删除小程序实例时,Java卡确实会执行垃圾收集,这确实会清除堆(在持久内存中)清洁。没有使用特殊的API,这是你唯一可以使用的存储区域。我不太明白这个答案(事实上,我也不太明白你的问题)。你在使用什么插件?什么是pyapdu工具?我在Eclipse中安装了JAVACARD插件和JCOP插件。当我试图用硬件运行程序时,它用以前的小程序替换了我最新的小程序。因此,我每年都会在智能卡中丢失数据