Я пытаюсь сделать 2 сообщения, чтобы поговорить друг с другом с помощью RSA. Первый - в C++, а второй - в java. Сначала нужно отправить открытый ключ в java-приложение. Я используюJava и C++ (VS) RSA-шифрование
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? – EJP
CryptExportKey возвращает данные в нестандартном, проприетарном формате Microsoft. –
@GregS Возможно, за это время [Microsoft проделала движение по указанию структуры] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa375601%28v=vs.85% 29.aspx), поэтому он должен быть относительно простым для синтаксического анализа (использование ByteBuffer было бы хорошей идеей, так как все, похоже, использует кодировку little-endian). –