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

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

【问题讨论】:

    标签: java encoding javacard ecdsa pkcs#8


    【解决方案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的回答已经解决了我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多