在 Java Card 上编码 publicKey

Posted

技术标签:

【中文标题】在 Java Card 上编码 publicKey【英文标题】:Encode publicKey on Java Card 【发布时间】:2015-05-20 17:41:20 【问题描述】:

如何在 Java Card 上对 ECDSA PublicKey 进行编码,以便我可以在另一个平台上对其进行解码(例如,在响应 APDU 中发送编码的密钥并在标准 Java 应用程序中处理它)? Java 上的keyPair.getPublic().getEncoded() 可以使用 PKCS#8 编码来解决问题,但据我所知,getEncoded() 在 Java Card 平台上不可用。

【问题讨论】:

【参考方案1】:

你可以这样实现这个函数:

卡面:

1 KeyPair.getPublicKey() --> publicKey; 2 publicKey.getW() --> W; 3 发送W到外面;

标准java应用端:

1 得到 W 个数据字节; 2 W 数据字节 --> ECPoint; 3 使用第 2 步中生成的 ECPoint 使用 ECPublicKeySpec 类构建 PublicKey; 4 在您的应用程序中使用公钥;

【讨论】:

【参考方案2】:

getEncoded() 方法以其主要编码格式返回密钥,如果密钥不支持编码,则返回 null。所以你不需要将它用于你的目标。你可以简单地使用向下转换为ECPublicKey

ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic()

上述行中的pubKey,等于Java应用程序中getEncoded()方法的输出。

【讨论】:

谢谢,但据我所知,您只能在响应 APDU 中发送字节数组,而 ECPublicKey 不是字节数组。那是主要问题。无论如何,看起来unknwyshsa的回答已经解决了我的问题。

以上是关于在 Java Card 上编码 publicKey的主要内容,如果未能解决你的问题,请参考以下文章

解决码云出现git@gitee.com: Permission denied (publickey).

如何在“添加到购物车”按钮上编码

如何在 Chromebook 上编码/运行 Ruby [关闭]

获取缓冲区内容与将缓冲区内容返回—Java card开发第一篇

HDOJ 1528 Card Game Cheater

java.security.InvalidKeyException:无效的密钥格式... PublicKey 错误