微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 APDUJavacard中发送我的公钥?

如何解决如何在 APDUJavacard中发送我的公钥?

我正在尝试从 APDU 中的密钥对发送我的公钥,以便可以在另一个程序中验证签名。到目前为止,我还没有找到将密钥放入 APDU 缓冲区的方法

我在网上找到了使用 RSAPublicKey.getExponent() 将密钥存储在字节数组中(然后将其添加到缓冲区)的解决方案,但由于我没有使用 RSAPublicKey,因此这并没有那么有用。这是唯一的方法吗?我是否需要使用 RSAPublicKey 而不是密钥对,或者是否有某种方法可以将我的密钥对中的公钥放入 APDU 缓冲区?

这是我的密钥生成代码

KeyPair key = new KeyPair(KeyPair.ALG_RSA,(short)5120);
key.genKeyPair(); 

解决方法

首先,RSA公钥由模数和指数组成。首先,您需要使用 getPublic() 并恢复具有 RSAPublicKey 接口的对象,该接口公开 getExponent 和 getModulus 方法,这些方法将为您提供可以放入 APDU 缓冲区的字节数组。 公共指数可能类似于 0x010001,但模数将是您声明为 KeyPair 参数的位长。

对于如此长的模数,您将需要扩展 APDU 或将其拆分为多个 APDU 交换。为了兼容性,我通常会推荐第二种方法,但如果您正在处理的系统肯定会在两端处理扩展的 APDU,您可以尝试一次性完成。

,

我面前没有有效的 JavaCard IDE,但应该可以:

KeyPair keyPair = new KeyPair(KeyPair.ALG_RSA,(short)xxx);
keyPair.genKeyPair();
RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublicKey();
short len = pubkey.getExponent(apdu.getBuffer(),(short)0);

然后从这里继续...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。