如何在 Java Card 上对 ECDSA PublicKey 进行编码,以便我可以在另一个平台上对其进行解码(例如,在响应 APDU 中发送编码的密钥并在标准 Java 应用程序中处理它)?keyPair.getPublic().getEncoded()
在 Java 上使用 PKCS#8 编码可以解决问题,但据我所知getEncoded()
,在 Java Card 平台上不可用。
问问题
425 次
2 回答
4
您可以像这样实现此功能:
卡面:
- 1 KeyPair.getPublicKey() --> publicKey;
- 2 publicKey.getW() --> W;
- 3 向外部发送W;
标准java应用端:
- 1 得到 W 个数据字节;
- 2 W 数据字节 --> ECPoint;
- 3 使用在步骤 2 中生成的 ECPoint 使用 ECPublicKeySpec 类构建 PublicKey;
- 4 在您的应用程序中使用公钥;
于 2015-05-21T07:22:56.877 回答
1
getEncoded()
方法以其主要编码格式返回密钥,如果密钥不支持编码,则返回 null。所以你不需要将它用于你的目标。您只需使用向下转换即可ECPublicKey
:
ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic()
上pubKey
一行中的,等同getEncoded()
于 Java 应用程序中方法的输出。
于 2015-05-21T02:30:31.220 回答