Java 解释tpm工具tpm_getpubek输出

Java 解释tpm工具tpm_getpubek输出,java,tpm,Java,Tpm,tpm_getpubek的输出形式如下: 1) 我很难理解如何使用它。我试图通过以下代码将其转换为java公钥对象: byte[] derPublicKey = DatatypeConverter.parseHexBinary(keyBloc); X509EncodedKeySpec x509publicKey = new X509EncodedKeySpec(derPublicKey); KeyFactory factory = KeyFactory.getInstance("RSA");

tpm_getpubek的输出形式如下:

1) 我很难理解如何使用它。我试图通过以下代码将其转换为java公钥对象:

byte[] derPublicKey = DatatypeConverter.parseHexBinary(keyBloc);
X509EncodedKeySpec x509publicKey = new X509EncodedKeySpec(derPublicKey);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(x509publicKey);
但这将返回以下错误:

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:205)
 [java]     at java.security.KeyFactory.generatePublic(KeyFactory.java:334)

tpm_getpubek
以原始形式返回十六进制编码的公钥模数,而不是X509编码的blob。假设您将返回的数据保存到名为
keyBlock
(删除空格)的字符串中,您将生成如下公钥:

PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(
    new RSAPublicKeySpec(new BigInteger(keyBlock, 16), new BigInteger("65537")));
PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(
    new RSAPublicKeySpec(new BigInteger(keyBlock, 16), new BigInteger("65537")));