在 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 [关闭]