我在我的應用程序中使用OpenSSL的高層次函數EVP_*()
實現加密/解密方案,因此我可以輕鬆切換實際使用的算法,而無需更改API調用。從EVP_PKEY密鑰對提取公鑰?
我可以創建一個關鍵對相對容易:
// dumbed down, no error checking for brevity
EVP_PKEY * pkey;
// can change EVP_PKEY_RSA to something else here
EVP_PKEY_CTX * context = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
EVP_PKEY_keygen_init(ctx);
// could set parameters here
EVP_PKEY_keygen(context, &pkey);
// ...
EVP_PKEY_CTX_free(context);
pkey
現在持有的關鍵對,即兩個祕密和公共密鑰。這對於祕密這邊的東西很好,但顯然我想提取只有公鑰部分用於公共事物。
我能找到RSA-specific functions,但沒有使用API的高級別EVP_*()
。
幫助?
你的問題是什麼? *「只提取用於公共事物的公共密鑰組件」*是含糊不清的。你想知道如何從「PKEY」獲得公鑰嗎?或者你想知道如何保存公鑰?或者是其他東西? – jww 2014-08-27 14:15:15
@jww:我認爲這個問題是毫不含糊的......我想獲得一個僅包含公鑰組件的EVP_PKEY數據結構。 – DevSolar 2014-08-27 14:26:57
*「我想獲得一個僅包含公鑰組件的EVP_PKEY數據結構」* - 這需要一些工作,因爲OpenSSL沒有爲'EVP_ *'設備設置(可以完成,但它可以完成需要一些工作)。通常你寫出DER或PEM編碼密鑰(公共或私人)。你看過['pem(3)'](http://www.openssl.org/docs/crypto/pem.html)裝置中的函數嗎?使用'* _bio'函數,您可以寫入文件或內存。例如,查看'/apps/rsautl.c'(對於RSA情況)。 –
jww
2014-08-27 15:00:00