Java and C++ (VS) RSA encryption

Java and C++ (VS) RSA encryption

本文关键字:RSA encryption VS and C++ Java      更新时间:2023-10-16

我正在尝试使用RSA使两个应用程序相互通信。第一个是用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。你能告诉我如何导入/导出密钥吗?

您必须为Microsoft RSA公钥结构编写解码器。幸运的是,这个结构定义得很好。请注意,它使用小端序编码,因此您可以首先将结构包装在ByteBuffer中,将顺序设置为小端序。

然后应该使用BigInteger.valueOf(1, bigEndianByteArray)将公共指数和模数部分转换为BigInteger。诀窍是从ByteBuffer中读取字节后,按正确的顺序获取bigEndianByteArray中的字节。