C 如何使用OpenSSL生成RSA私钥?

C 如何使用OpenSSL生成RSA私钥?,c,openssl,key,rsa,private,C,Openssl,Key,Rsa,Private,我想知道如何在我的C源文件中使用OpenSSL库生成RSA私钥。我知道如何使用terminal命令生成它 实际上,我的server.c文件将生成一个私钥并发送到client.c 如果可能,请帮助我一些源代码,否则任何帮助都将不胜感激 我正在Linux机器上工作。在使用正确的种子设定PRNG后,您将使用 编辑: 最初编写此答案时需要调用RAND\u add,但当前版本的OpenSSL不再需要手动植入PRNG #include <openssl/rsa.h> #include <o

我想知道如何在我的C源文件中使用OpenSSL库生成RSA私钥。我知道如何使用terminal命令生成它

实际上,我的server.c文件将生成一个私钥并发送到client.c 如果可能,请帮助我一些源代码,否则任何帮助都将不胜感激

我正在Linux机器上工作。

在使用正确的种子设定PRNG后,您将使用

编辑: 最初编写此答案时需要调用
RAND\u add
,但当前版本的OpenSSL不再需要手动植入PRNG
#include <openssl/rsa.h>
#include <openssl/pem.h>

const int kBits = 1024;
const int kExp = 3;

int keylen;
char *pem_key;

RSA *rsa = RSA_generate_key(kBits, kExp, 0, 0);

/* To get the C-string PEM form: */
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL);

keylen = BIO_pending(bio);
pem_key = calloc(keylen+1, 1); /* Null-terminate */
BIO_read(bio, pem_key, keylen);

printf("%s", pem_key);

BIO_free_all(bio);
RSA_free(rsa);
free(pem_key);
#包括 常数int kBits=1024; 常数int kExp=3; 内特凯伦; char*pem_键; RSA*RSA=RSA_生成_密钥(kBits,kExp,0,0); /*要获取C字符串PEM表单,请执行以下操作:*/ BIO*BIO=BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(bio,rsa,NULL,NULL,0,NULL,NULL); keylen=BIO_待定(BIO); pem_key=calloc(keylen+1,1);/*空终止*/ BIO_读取(BIO、pem_键、keylen); printf(“%s”,pem_键); BIO_free_all(BIO); RSA_-free(RSA); 免费(pem_键);
kExp=3可能是安全漏洞,请改用65537。该问题称为“小RSA指数”,请参见和 此外,请使用1024位以上

我想知道如何在我的c源文件中使用openssl库生成RSA私钥

生成密钥很容易。只需使用
RSA\u generate\u key\u ex
。下面的程序向您展示了如何做到这一点

保存公钥和私钥是另一回事,因为您需要知道其格式。下面的程序向您展示了如何以多种格式执行此操作


下面是各种函数和格式

相关,请参见。它讨论了SubjectPublicKeyInfo、PrivateKeyInfo以及公钥和私钥之间的区别

PEM_write_bio_RSAPublicKey(PKCS PEM格式)。注意
开始RSA公钥

$cat rsa-public-1.pem
-----开始RSA公钥-----
MIIBCgKCAQEAmkD+KWLBSMVYUYOUBUVKYWDYBNXGQNJRKU97Z+hBG3OA85fY6oV
CdyoT+KDMTAFGTGY76KRKHVYQH3HYFPEC5VNPLJND6OVJCXR6NFUR2B7AHLKRES
qyPMrAHNU16wp85qdHALNd72EoUPkVItHqaBOldx7J9vyUF3bpAWq4XxRlbiK9iv
Yuci4/jr4ppRoso6LZm9Inzm53zYt2AqHUZQ+3WgK+czyk8tlgen7rtlz7opvva
aAiRGWiUWACtRwmpAq2L5PuWZkYdQ7WQigkx5c3x8iBkeEh022zqYkGOTh2Ue4Uf
rIYuSqjLb2d+jkfZQ1S4LQLQPtMxNV/FqwIDAQAB
-----结束RSA公钥-----
PEM_write_bio_PUBKEY(传统PEM格式)。注意
开始公钥

$cat rsa-public-2.pem
-----开始公钥-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmkD+kwlbsmvyUYOBuVky
WDYBNXGQNJRKU97Z+hBG3OA85fY6oVCdyoT+KDmtAFgTgY76KRkHVYQH3HYFpe
c5vNptLJNd6OVJCXR6NFUR2b7aHLkresqyPMrAHNU16wp85qdHALNd72EoUPkVIt
HqaBOldx7J9vyUF3bpAWq4XxRlbiK9ivYuci4/JR4ProsO6LZM9InZM53ZYT2AQ
HUZQ+3WgK+CZYK8TLGEN7RTLZ7OPVVAAIRGWIUWACTRWMPAQ2L5PUWZKYDQ7WQ
IGKX5C3X8IBKEEH022ZQYKGOTH2UE4UFRIYOUSQJLB2D+jkfZQ1S4LQLQPtMxNV/F
qwIDAQAB
-----结束公钥-----
PEM_write_bio_PrivateKey(PEM)。注意
开始私钥

$cat rsa-private-1.pem
-----开始私钥-----
Miievqibadanbgkqhkig9w0baqefaascwggsjageaaoibaqcqp6tcvuya/JR
G4G5WTJYPE3EZA0MSPRM73TN6EEBC4DZL9JQHUJ3KHP4OOA0AWBOBjVOPGQDVHA
FCDGWL5ZM82M0SK13O5UKJDHO0VRHZVTOCUTC6YRI8YSAC1TXRCNZMP0CAS13VYS
hQ+RUi0epoE6V3Hsn2/JQXdukBarhfFGVuIr2K9i5yLj+OvidlgiJotMB0IFOBN
FNI3YCODRLD7DAAR5ZNNKTY0SYQ3U0NUIM9UBOCJEZAJRYAK1HCAKCRYVK+5Zm
Rh1DtZCKCTHlzfHyIGR4SHTbbOpiQY5OHZR7hR+SHI5KmTvZ36OR9LDVLGTATA+
0ZE1x8Wragmbaaeggeawaybdcjjehggldj22v5de171rqgbf7ax2nkjg7/UfSiW0
0qz100gjTIOW9jXNPQNl7Vj/60NURYC+UFKIF2ROYXL4CZPHQG4QHYPRHLBF
FWNX6SGEOBBY8EXUVKQJK1YFTBSTMZTYXLYWZADN5R+0sHvsTr57LyB3dTJgKsn
4iAuJXfR4EthZ6iEM+D8FrmXt5lJ2d1FoMLKiC09M7nMuY9ARqR6O5Tr/Tq4vqfw
LA6MV3MWRD2NiznyTjTxukaxvCri1Th2YCL6U2JQWRJLBEAGNYYDhGEVH5PT
utPHtDciCxpUgGuQ8wNBEstiGYXklpLJFS48+bWVCQKBgQDLC4DNeZ/Tc9g+WUFU
YPVCTKFCYMT2YMLCNEKDQIPDT14PMV3ODIXZGJ1OWRNK150PET0xXY1HRJCBSN+
XUIc5Xa/0nWazdz7c0nqzZgOpVYfPcApQ1K/dqsoWzRY+rlz2PEOYJwMaKW/kkVV
8EPEg38Ck/QR5IKSBYLJTEHQKBGQDCE+iKtPjlFPJ4WX8vTu5QVpRjYmqj87/j
4JFpSh7Lv2PsxSCGQR/7JoyB8Zaz9dyP+RV8/ySJuwGqSseU+W495h8oHe1DtIxU
lTR1GB4YI4BU+txvydzQiaFyEUdEFqJblCxXg+XDAcwCUYESLbR661ljbVV/0Qep
HMTeXgfnbwKBgDPMYHSK1ZItGHp3bKpD8CX0xktZy2xVcUV3g52XAWg9NcH6iQWL
4O/OSO1A03OYNHF2DOZBD9JG9QOUMITPH8E1BMDS4OG4ORG83D6MZNY7HCV4ULL
kOOVU369HbKha9Q5AO4JCWZFABvKJfQRkkg8v5cZxzY5RJkb5Hu4LlW9AoGACvxg
2GT8okQapj23934n7BXX7/1BNN2x+zdWP3JWZv/6rwc7nRnUqqU0zqpM7wF2YhOZ
6SOodrc/ktUCjSHB3nE/VU7LdkWen7CF9A9Ws9pdh29cQFxQwt7jZcQgGHKG3VFz
Z8Yllmxlj8P23IYEaeUdeYZVjBDMs/rSDBWXsLUCgYEAw4TTKH/4BdnRIKhNLp63
n8oGo7Cc/idSQD8XbUVpPbLmychOs2no3Y0XT+xRTAuXjm0GYdmY3Sk3/polGMu5
NHmi5293eAxJ+9ikSD+bYCaLCXFI2PmgJkm+US1WUCQOSAKOXS6MFSV2PN9YXKW
QCMIqX4p7BmO7OD1CFEu6ho=
-----结束私钥-----
PEM_write_bio_PKCS8PrivateKey(PEM)。注意
开始私钥

$cat rsa-private-2.pem
-----开始私钥-----
Miievqibadanbgkqhkig9w0baqefaascwggsjageaaoibaqcqp6tcvuya/JR
G4G5WTJYPE3EZA0MSPRM73TN6EEBC4DZL9JQHUJ3KHP4OOA0AWBOBjVOPGQDVHA
FCDGWL5ZM82M0SK13O5UKJDHO0VRHZVTOCUTC6YRI8YSAC1TXRCNZMP0CAS13VYS
hQ+RUi0epoE6V3Hsn2/JQXdukBarhfFGVuIr2K9i5yLj+OvidlgiJotMB0IFOBN
FNI3YCODRLD7DAAR5ZNNKTY0SYQ3U0NUIM9UBOCJEZAJRYAK1HCAKCRYVK+5Zm
Rh1DtZCKCTHlzfHyIGR4SHTbbOpiQY5OHZR7hR+SHI5KmTvZ36OR9LDVLGTATA+
0ZE1x8Wragmbaaeggeawaybdcjjehggldj22v5de171rqgbf7ax2nkjg7/UfSiW0
0qz100gjTIOW9jXNPQNl7Vj/60NURYC+UFKIF2ROYXL4CZPHQG4QHYPRHLBF
FWNX6SGEOBBY8EXUVKQJK1YFTBSTMZTYXLYWZADN5R+0sHvsTr57LyB3dTJgKsn
4iAuJXfR4EthZ6iEM+D8FrmXt5lJ2d1FoMLKiC09M7nMuY9ARqR6O5Tr/Tq4vqfw
LA6MV3MWRD2NiznyTjTxukaxvCri1Th2YCL6U2JQWRJLBEAGNYYDhGEVH5PT
utPHtDciCxpUgGuQ8wNBEstiGYXklpLJFS48+bWVCQKBgQDLC4DNeZ/Tc9g+WUFU
YPVCTKFCYMT2YMLCNEKDQIPDT14PMV3ODIXZGJ1OWRNK150PET0xXY1HRJCBSN+
XUIc5Xa/0nWazdz7c0nqzZgOpVYfPcApQ1K/dqsoWzRY+rlz2PEOYJwMaKW/kkVV
8EPEg38Ck/QR5IKSBYLJTEHQKBGQDCE+iKtPjlFPJ4WX8vTu5QVpRjYmqj87/j
4JFpSh7Lv2PsxSCGQR/7J