当前位置: 首页 > 知识库问答 >
问题:

在javacard中选择小程序时,是否可以返回一些数据以及状态字9000?

寇景明
2023-03-14

我想知道,当javacard小程序被选中时,我是否可以从中发回一些数据。

由于select()方法返回一个布尔值,我不知道如何从中返回数据字节。

有人能帮我吗?我希望小程序返回一个简单的字节数组,随着状态字9000(这是默认的成功),当我发送选择命令到卡。

当我发出以下命令时

00A404000601020340506

我想要一个回应,

010203049000

(前四个字节是小程序返回的数据)TIA。提前谢谢。。

共有3个答案

盖昀
2023-03-14

查看下面的代码

if (selectingApplet())
    {
        byte[] apduBuffer = apdu.getBuffer();
        
        apduBuffer[0] = 0x01;
        apduBuffer[1] = 0x02;
        apduBuffer[2] = 0x03;
        apduBuffer[3] = 0x04;
        
        apdu.setOutgoingAndSend((short)0, (short)4);
        return;
    }

上传并安装小程序后,尝试选择小程序,AID为112233445566

>> /send 00A4040006112233445566
>> 00 A4 04 00 06 11 22 33 44 55 66
<< 01 02 03 04 90 00

选择applet时返回数据的另一种方法

private static final byte[] STACK_OVERFLOW = {'S','T','A','C','K',' ','O','V','E','R','F','L','O','W'};

if (selectingApplet())
    {
        byte[] apduBuffer = apdu.getBuffer();
        //copy array STACK_OVERFLOW to apduBuffer
        Util.arrayCopyNonAtomic(STACK_OVERFLOW,(short)0,apduBuffer,(short)0,(short)STACK_OVERFLOW.length);
        //set and set buffer with STACK_OVERFLOW array length
        apdu.setOutgoingAndSend((short)0, (short)STACK_OVERFLOW.length);
        return;
    }
游乐池
2023-03-14

是的,在小程序选择期间可以返回数据。

在小程序选择过程中,平台通常会调用Select()方法。如果您希望小程序被选中,您可以在该方法内部执行一些逻辑操作,并返回true,如果您不希望小程序被选中,则返回false。调用该方法后,如果您的小程序被成功选中,平台将随后调用APDU. flow方法,在该方法中,您可以像处理小程序中的任何其他APDU命令一样处理Select命令。

但是,如果需要响应数据,您的命令APDU应该指示一个Le字段。您可以将命令APDU更改为00 A4 04 00 06 01 02 03 04 05 06 00以返回所有可用的响应数据。

至于返回9000,只需确保退出APDU即可。在不引发异常的情况下处理方法,或者可以使用9000值引发ISOException。我更喜欢前者。

凌朗
2023-03-14

我猜你在这个过程中做到了“如果选择了applet()然后返回”的“良好实践”吗?您需要处理传入的APDU,而不是简单的返回。

您可以返回数据以正常方式进行选择,但如果选择成功,请注意返回0x9000。

 类似资料:
  • 我试图用vba做一个按钮来删除Excel表中的一行,但当我按下按钮并选择不止一行或许多单元格时,我想限制从E到I的选择(和行的数量无关)这里是我的代码,非常感谢,希望你能帮助我,我还没有找到任何类似的东西。

  • 我们有一个web应用程序,我们想在“批处理”模式下运行,在这种模式下,我们不希望任何endpoint暴露(出于安全原因)。 这在SpringBoot可能吗?

  • 我有一个通知组件,我有一个超时设置。超时后,我调用。 我想做的是,如果已经超时,我想只呈现任何内容: 问题是: 返回();//这里有一些语法错误

  • app.py reg_account.html 错误: 我想让的结果在中的复选框未选中时返回False,但我不明白为什么当我勾选了该复选框时,结果可以存储到数据库中?我试着调试了几次,但还是找不到一个可能的解决方案,所以有没有人可以帮忙?

  • 问题内容: 我喜欢旧的Java小程序。但是因为我真的很喜欢JFX的工作方式,所以我想使用JFX编写一些游戏(甚至是游戏制作系统,谁知道?),但是我希望能够将它们发布到我的网站上。人们将如何去做呢? 问题答案: 是的,您应该可以将JavaFX嵌入到您的网页中: http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/deploymen

  • 问题内容: HTML: CSS: 如您所见,它不起作用。是否有仅CSS方式将文本置于选择框中? 问题答案: 恐怕普通的CSS不可能做到这一点,并且不可能完全兼容跨浏览器。 该插件隐藏元素,并动态创建元素等以显示自定义下拉列表样式。我非常有信心您将能够更改跨度等的样式以使项目居中对齐。