对Java卡上的公钥进行编码

对Java卡上的公钥进行编码,java,encoding,javacard,ecdsa,pkcs#8,Java,Encoding,Javacard,Ecdsa,Pkcs#8,如何在Java卡上对ECDSA公钥进行编码,以便我可以在另一个平台上对其进行解码(例如,在响应APDU中发送编码密钥并在标准Java应用程序中处理)keyPair.getPublic().getEncoded()可以使用PKCS#8编码,但据我所知,getEncoded()在Java卡平台上不可用。getEncoded()方法以其主编码格式返回密钥,如果密钥不支持编码,则返回null。所以你不需要把它用于你的目标。您只需使用向下转换到ECPublicKey: ECPublicKey pubKey

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

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

ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic()

上行中的
pubKey
与Java应用程序中的
getEncoded()
方法的输出相同。

您可以这样实现此函数:

卡端:

  • 1 KeyPair.getPublicKey()-->publicKey
  • 2 publicKey.getW()-->W
  • 3将W发送到外部
标准java应用程序端:

  • 1获取W个数据字节
  • 2 W数据字节-->ECPoint
  • 3使用步骤2中生成的ECPoint构建PublicKey,使用类ECPublicKeySpec
  • 4在应用程序中使用公钥
谢谢,但据我所知,您只能在响应APDU中发送字节数组,而ECPublicKey不是字节数组。这是主要问题。不管怎么说,这个未知的答案似乎解决了我的问题。