C语言求base64格式公钥的n和e
时间: 2024-03-11 13:49:37 浏览: 17
首先,公钥一般是以ASN.1格式存储的,需要进行解析才能得到n和e。不过,如果你已经有了DER编码的公钥文件,可以使用openssl库提供的函数进行解析。
以下是一个使用openssl库解析DER编码公钥文件的示例代码:
```c
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/x509.h>
int main(){
const char* pub_key = "-----BEGIN PUBLIC KEY-----\n"
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdRmJj6zW6Hf1VJgF6mrHs8otG\n"
"9M6buW1Iv6FwJNE8u7P5V8+Uu5uQZJ8xX1mFQz4g7tZoB5oXFlmEhtVv7+D8JrK0\n"
"QZ9pygYcsuHvW+KzJwzvXAts1eUdJdIbPbE0QyBQ1/7TlWtW+7CJTP5oJr2aZmll\n"
"JqT2E3mMOL4X4QZr6wIDAQAB\n"
"-----END PUBLIC KEY-----";
BIO* bio = BIO_new_mem_buf((void*)pub_key, -1);
EVP_PKEY* pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL);
if(!pkey){
printf("Error: failed to parse public key.\n");
return 1;
}
RSA* rsa_key = EVP_PKEY_get1_RSA(pkey);
if(!rsa_key){
printf("Error: failed to get RSA key from public key.\n");
return 1;
}
const BIGNUM* n = RSA_get0_n(rsa_key);
const BIGNUM* e = RSA_get0_e(rsa_key);
char* n_str = BN_bn2base64(n, NULL);
char* e_str = BN_bn2base64(e, NULL);
printf("n: %s\n", n_str);
printf("e: %s\n", e_str);
RSA_free(rsa_key);
EVP_PKEY_free(pkey);
BIO_free_all(bio);
OPENSSL_free(n_str);
OPENSSL_free(e_str);
return 0;
}
```
注意,这里使用的公钥是PEM格式的,如果你的公钥是其他格式,需要根据实际情况进行调整。