openssl生成公私钥,并读取pkcs8公钥,c实现
时间: 2024-01-20 11:08:31 浏览: 196
以下是使用 OpenSSL 库在 C 语言中生成 RSA 公私钥对,并读取 PKCS#8 格式公钥的代码示例:
```c
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
RSA *keypair = RSA_new();
BIGNUM *exponent = BN_new();
int bits = 2048; // 密钥位数
// 设置指数
BN_set_word(exponent, RSA_F4);
// 生成密钥对
RSA_generate_key_ex(keypair, bits, exponent, NULL);
// 写入私钥
FILE *fp = fopen("private.pem", "wb");
PEM_write_RSAPrivateKey(fp, keypair, NULL, NULL, 0, NULL, NULL);
fclose(fp);
// 获取公钥
EVP_PKEY *pubkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pubkey, keypair);
// 写入 PKCS#8 格式公钥
fp = fopen("public.pkcs8", "wb");
i2d_PublicKey_fp(fp, pubkey);
fclose(fp);
// 读取 PKCS#8 格式公钥
fp = fopen("public.pkcs8", "rb");
EVP_PKEY *pubkey2 = d2i_PUBKEY_fp(fp, NULL);
fclose(fp);
// 比较公钥
if (EVP_PKEY_cmp(pubkey, pubkey2) == 1) {
printf("Public key is the same.\n");
} else {
printf("Public key is different.\n");
}
return 0;
}
```
上述代码中,`d2i_PUBKEY_fp` 函数用于从 PKCS#8 格式文件中读取公钥,`EVP_PKEY_cmp` 函数用于比较两个公钥是否相同。
阅读全文