我在我的应用程序中使用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