无法在 OpenSSL 中设置公钥/私钥
Can't set public/private key in OpenSSL
我正在尝试将公钥和私钥设置为字符串中的EVP_PKEY C++。但是,即使在线遵循了几个示例,PKEY 也始终显示为 NULL。以下是重现该问题的代码(这是针对私钥的,但对于公钥的效果相同):
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <string>
#include <iostream>
int main()
{
EVP_PKEY *keypair;
keypair = NULL;
std::string privateKey = "-----BEGIN PRIVATE KEY-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCuKz6ENUUniXU9CelOgD6oTlmkxPWZoaeBUVXLwlh2aE4As/8RMaIpTsxq9M8UmY7L69GVHo51+wmACrW1ftEa3S5rVLRuOrwFNYGLUlrbji4huD5ipxS0MbxKE+lc/VYLTN26zPI8pl8Qb38eESiLXZ7uNO1XRisKxjixy/J4CMMDdn0UFTjKxXmdQluN67T1JlzGzALRKYFMLF8H+VLqhW6ygFE1OjjJ8zwQuP8t2mRBFLXwH1bwffXX4rUwAb+C9FXHWEn5SJv8aoj/9awEw7cYWa0eeAbl2TfPW+QcbzcITp9L9g/9/8M9rH0wqURCzv+z7P0Wkc2JrdcA6vIDAgMBAAECggEAHjFO8BpP96+jjEZIlJw0wHZ8ocynCs/0Or2/0sfJEBW61/JcGD3zb5fCZhQ0Rczs7TrfJSub5KX1GqZAo8rtMuv+3QpdEPLLn1eMMnu/VmpKYvwOjImMVER+8JSNEtqz7NeRZI2cvJjWyAGcFrlAvxAmugKg1k1Krt53+5JwYRBSWQb+05egOXVoQahBJbLWbWJrUFBjmsCAkF/1MvnJ9h2CAmrJIOWMjzWgs2MyUSzAE0I0vLG/mtlUXUGWA7EFAY6BNGWUaHdd6Cy2GhlCoEEL4gYATdtQK1k5r/5O54gTJq1rISEjicXp/qLiFIEa8feuCFGWfFQnIXlmvRZ/gQKBgQDkA8gdQ5XTBQHdcasIeNjJTgmB1W0cugYmUB01O0Kk0O5sVAh0LtWkIF6Tw5Od3olYRt/UNpegOvYoc+lm3kLS14NPcd5P3Zdl/i9NcWq8QF3uNzT5NfLi2nh8lyH2q41Koc2skRQsIQkZEOgLjP2+n3SsZf0PBOE9rYeO9rkSwwKBgQDDi6CWVOSH4suSGLJeauc/j7/MwMAtM7r5cOegh1tJZrAhiL7DXeWM9iT2VWU+9fiH16Je6+0PuXPmkcj3T/E/fSWQ+6n0YjnvIuyQGxMFXW2Zwssxgv51iD+EO88lFD+2wR6YUHl0wPeSQTUvHM3xUp/uOG0yUvoCijqxFCYvwQKBgCvy7qd1V3ONC4b7WdQQNvjWKc70rEtVL8pCtt6DxZyvCMWojNiYDmXMN26Ty+gp9J8nSg1FWIRx2PCDJwHE5WxuTckKUadjNsNZ8xQiQEh4v6Ii0fsXAvHm2kJpfwpklp9EALi6XgEDfRVvxMo1KtOLOJniLpyufBu/TtmnhJSxAoGAG+CI+UWK+vBTMzXAIAO/iek1X7xO6WLJkgwNiW4ijnlMPMug3ntBYXIp3NBZybsJPlx4cm3R8v7uTf2Ul+VWsEVoGJ44IXXranMhJH4nnQkvuc7yZtGU8y6EV5arNk8Hskcf1HkMh5+G69vN+DR0C6ZK1IxIzPbVW41XRq1nsEECgYBmtbY5dIvRemh4FdsMjdUuQcurvyQpEIwdczWurRXfKCuWtbVvn1arTQ/nL+kUixMjPueBInX90vxP+ptoPAHXOMKuZx+bFNwIQZ+OIBQ1WPUG8nV4o7tRZOkIPSy8YVz8UFQuuA6WF5W2kh3gc3iPrQt5JjspkWPDuC1taQo/pw==-----END PRIVATE KEY-----";
BIO *bio = BIO_new(BIO_s_mem());
if(BIO_write(bio, (unsigned char*)privateKey.c_str(), (size_t)privateKey.size()) != (int)privateKey.size())
{
BIO_free_all(bio);
return 0;
}
PEM_read_bio_PrivateKey(bio, &keypair, NULL, NULL);
BIO_free_all(bio);
if(keypair == NULL)
{
std::cout << "error";
}
else
{
return 0;
}
}
我做错了什么?
您传递的私钥无效;缺少换行符。-----BEGIN PRIVATE KEY-----
页眉后面需要有一个,相应的页脚之前需要有一个,正文中每 64 个字符后面需要一个,例如
std::string privateKey = "-----BEGIN RSA PRIVATE KEY-----n"
"MIIEogIBAAKCAQEAris+hDVFJ4l1PQnpToA+qE5ZpMT1maGngVFVy8JYdmhOALP/n"
"ETGiKU7MavTPFJmOy+vRlR6OdfsJgAq1tX7RGt0ua1S0bjq8BTWBi1Ja244uIbg+n"
/* ... */
"5y/pFIsTIz7ngSJ1/dL8T/qbaDwB1zjCrmcfmxTcCEGfjiAUNVj1BvJ1eKO7UWTpn"
"CD0svGFc/FBULrgOlheVtpId4HN4j60LeSY7KZFjw7gtbWkKP6c=n"
"-----END RSA PRIVATE KEY-----";
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何在C++中使用X509证书模在令牌中查找私钥
- 私钥解密代码使用公共接口说明符到 BSAFE 库 v6.0?
- 从字符串 Crypto++ 导入 RSA 公钥/私钥
- 将私钥和证书存储在C++/OpenSSL中
- 区块链超级账本私钥错误
- 博坦加载现有的 RSA 私钥
- 一代 RSA-2048 密钥(公钥和私钥)
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 在 GnuPG 中从 C/C++ 和参数生成公钥/私钥
- 无法在 OpenSSL 中设置公钥/私钥
- 我将如何从字符串/字节数组或任何其他容器加载私钥/公钥
- 通过OpenSSL(c++)以XML(w3c)格式保存RSA公钥和私钥
- 公钥-私钥加密教程
- 如何使用openssl-lib-pem_read从字符串中读取公钥/私钥
- DSA公钥大于私钥
- 我可以从智能卡的密钥容器中获得公钥/私钥对吗?
- 使用libopenssl从私钥转储公钥
- 如何读取RSA公钥和私钥到单个RSA结构
- 从RSA密钥对变量中分离公钥和私钥