1

我正在尝试使用 RSA 使 2 个应用程序相互交谈。第一个是c++,第二个是java。第一个需要向 java 应用程序发送一个公钥。我正在使用一个

CryptExportKey(m_hCryptKey, NULL, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen);

为此发挥作用。在 java 应用程序中,我尝试使用此函数导入它:

public PublicKey getPublicKeyFromBytes(byte[] keyBytes) throws NoSuchAlgorithmException, InvalidKeySpecException {
    KeyFactory keyFactory;
    keyFactory = KeyFactory.getInstance("RSA");
    X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(keyBytes);
    return keyFactory.generatePublic(pubKeySpec);
}

它抛出 InvalidKeySpecException。你能告诉我我应该如何导入/导出密钥吗?

4

1 回答 1

1

您必须为 Microsoft RSA 公钥结构编写解码器。幸运的是,该结构定义明确。请注意,它使用 little-endian 编码,因此您可以首先将结构包装在ByteBuffer 将 order 设置为 little-endian。

然后您应该将公共指数和模数部分转换为BigIntegerusing BigInteger.valueOf(1, bigEndianByteArray)。诀窍是在bigEndianByteArrayByteBuffer.

于 2013-06-23T12:55:10.367 回答