有人知道如何從編碼字節數組中創建RSA密鑰?C++/Openssl獲取來自編碼字節的RSA密鑰(由java編碼)
我的問題是,我嘗試開發一個與用Java編碼的服務器進行交互的C++客戶端。 在Java中,客戶端接收編碼爲字節數組的rsa密鑰,將其解碼爲RSA RSAPublicKey並使用此密鑰加密消息。
Java服務器/客戶端代碼:
public static PublicKey decodePublicKey(byte[] p_75896_0_)
{
try
{
X509EncodedKeySpec var1 = new X509EncodedKeySpec(p_75896_0_);
KeyFactory var2 = KeyFactory.getInstance("RSA");
return var2.generatePublic(var1);
}
catch (NoSuchAlgorithmException var3)
{
;
}
catch (InvalidKeySpecException var4)
{
;
}
field_180198_a.error("Public key reconstitute failed!");
return null;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
this.publicKey = CryptManager.decodePublicKey(data.readByteArray());
後,客戶端是做與他的關鍵部分加密的東西。
關鍵被髮送這樣的:
public static final KeyPair keys;
static
{
try
{
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(1024);
keys = generator.generateKeyPair();
} catch (NoSuchAlgorithmException ex)
{
throw new ExceptionInInitializerError(ex);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
byte[] pubKey = keys.getPublic().getEncoded();
writeBytes(pubKey);
我的問題是如何從字節數組的關鍵在C++中。
更新: 即時通訊目前正在研究這個代碼:
char* publicKey = ...
int publicKeyLength = 162;
EVP_PKEY* key = EVP_PKEY_new();
if(d2i_PUBKEY(&key, (const unsigned char**) &publicKey, publicKeyLength) != 0){
logError("Problem!");
}
logMessage("Key: "+to_string((uint64_t) (void*) key));
現在好了,我的問題是,我有在第三行的SIGSEGV錯誤,不知道這是什麼課程。那麼關鍵應該是有效的。
您是否在圖書館定居?否則,這個問題非常廣泛,因爲有很多方法可以做到這一點。 –
嗯,我更喜歡OpenSSL。那麼,但如果你有更好的解決方案或庫房,我會看看這個。 –
好的,您是否打開了[API文檔](https://www.openssl.org/docs/manmaster/man3/)以查看哪些功能在這種情況下可能會有所幫助? 'PEM_read_bio_PrivateKey'可能是一個很好的開始。 –