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