直接上代碼。默認生成的是pkcs#1格式html
// ---- rsa非對稱加解密 ---- // #define KEY_LENGTH 1024 // 密鑰長度 #define PUB_KEY_FILE "pubkey.pem" // 公鑰路徑 #define PRI_KEY_FILE "prikey.pem" // 私鑰路徑 // 函數方法生成密鑰對 void generateRSAKey(std::string strKey[2]) { // 公私密鑰對 size_t pri_len; size_t pub_len; char *pri_key = NULL; char *pub_key = NULL; // 生成密鑰對 RSA *keypair = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL); BIO *pri = BIO_new(BIO_s_mem()); BIO *pub = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL); PEM_write_bio_RSAPublicKey(pub, keypair); // 獲取長度 pri_len = BIO_pending(pri); pub_len = BIO_pending(pub); // 密鑰對讀取到字符串 pri_key = (char *)malloc(pri_len + 1); pub_key = (char *)malloc(pub_len + 1); BIO_read(pri, pri_key, pri_len); BIO_read(pub, pub_key, pub_len); pri_key[pri_len] = '\0'; pub_key[pub_len] = '\0'; // 存儲密鑰對 strKey[0] = pub_key; strKey[1] = pri_key; // 存儲到磁盤(這種方式存儲的是begin rsa public key/ begin rsa private key開頭的) FILE *pubFile = fopen(PUB_KEY_FILE, "w"); if (pubFile == NULL) { assert(false); return; } fputs(pub_key, pubFile); fclose(pubFile); FILE *priFile = fopen(PRI_KEY_FILE, "w"); if (priFile == NULL) { assert(false); return; } fputs(pri_key, priFile); fclose(priFile); // 內存釋放 RSA_free(keypair); BIO_free_all(pub); BIO_free_all(pri); free(pri_key); free(pub_key); }