c语言pkcs12导出公钥pem,从pem格式的私钥中提取公钥

在记忆中,没有ASN.1,DER,PEM或其他编码的概念。 RSA密钥对于公钥和私钥使用相同的结构。对于公钥,不使用某些字段。如果您对该领域感兴趣,请访问PKCS #1或RFC 3447。

因此,给定一个RSA*,你所需要做的就是拨打PEM_write_bio_RSAPublicKey(即使使用私钥)。您也可以使用PEM_write_RSAPublicKey(即使使用私钥)。所有读写功能请参见pem(3)。

您还可以通过RSAPublicKey_dup完成很长的路。它将采用一个准确的密钥(即,一个RSA*)并返回一个公钥(即,一个RSA*)。但大多数情况下这是不必要的一步。如果你有这个要求,把钥匙放在记忆里可能是有用的。

RSA* privKey = NULL;

RSA* pubKey = NULL;

BIGNUM* exp = NULL;

privKey = RSA_new();

ASSERT(privKey != NULL);

exp = BN_new();

ASSERT(exp != NULL);

rc = BN_set_word(exp, RSA_F4);

ASSERT(rc == 1);

rc = RSA_generate_key_ex(privKey, 1024, exp, NULL);

ASSERT(rc == 1);

pubKey = RSAPublicKey_dup(privKey);

ASSERT(pubKey != NULL);

RSA_print_fp(stdout, pubKey, 0);

if(pubKey) {

RSA_free(pubKey);

}

if(privKey) {

RSA_free(privKey);

}

if(exp) {

BN_free(exp);

}

的RSA_print_fp结果:

$ ./t.exe

Public-Key: (1024 bit)

Modulus:

00:c3:30:67:d9:11:59:9b:85:7a:1a:95:fa:fd:c0:

dd:cd:21:d6:41:6b:16:70:c2:57:9a:f2:d2:bd:3b:

c0:02:7b:6a:ab:7f:13:a7:53:2f:31:10:08:3a:62:

28:40:5f:82:19:23:f6:0f:78:f5:e3:e4:19:a1:b4:

73:65:35:10:db:17:28:41:42:ba:df:8c:18:3b:d8:

62:52:65:61:0e:cd:60:28:c9:75:a8:5b:46:a4:89:

db:78:89:49:87:5d:7f:ce:d0:44:c4:fd:4a:74:66:

d4:46:21:c1:89:97:28:de:43:e9:94:50:f1:36:85:

a7:ef:6c:6d:6f:5d:78:00:67

Exponent: 65537 (0x10001)

您可以添加一个调用PEM_write_RSAPublicKey:

FILE* file = fopen("rsa-pub.pem", "w");

ASSERT(file != NULL);

rc = PEM_write_RSAPublicKey(file, pubKey);

然后:

$ ./t.exe

$ cat rsa-pub.pem

-----BEGIN RSA PUBLIC KEY-----

MIGJAoGBAMb2jIVcTttHRqG9szv3CFZ742l7LxnVoM6oOfQXNOwabh+GB4Srf4IA

XRcGan7cj1DShnoPw9fp3IeuAUerk3xz8yPXCw09dLwrFcsmItLVnSLoRtpHnxN5

30Wd5vKpvKTLIQnurGo05s911ukFJeGo2y2OjSnTiQcJLUdt497tAgMBAAE=

-----END RSA PUBLIC KEY-----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值