【发布时间】:2013-06-19 19:54:20
【问题描述】:
我正在尝试使用 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。你能告诉我我应该如何导入/导出密钥吗?
【问题讨论】:
-
很明显 C++ 端不只是发送原始密钥字节,但你为什么不使用 SSL?
-
CryptExportKey 以非标准的、专有的、Microsoft 定义的格式返回数据。
-
@GregS 可能只是这次,Microsoft did go through the motions of specifying the structure,所以解析起来应该相对简单(使用
ByteBuffer是个好主意,因为它似乎都使用小端编码) . -
如果您发布一些(示例)公钥 blob,我可以查看是否可以对其进行解码...
标签: java c++ visual-studio encryption