openssl初始化RSA公钥

 手机用户2502905647 发布于 2023-02-03 08:08

我有RSA base64编码的公钥,我需要用来验证数字签名.我不明白如何使用公钥初始化RSA.

我的代码看起来像:

unsigned char *signature = ""; //signature string
char *original = ""; // my original string
unsigned char sha2HashDigest[SHA256_DIGEST_LENGTH];
SHA256(original, strlen(original), sha2HashDigest);

 char *key = "base64encodedKey";

 RSA *r = RSA_new();
//SET RSA public key?! how?

int result = RSA_verify(NID_sha256, sha2HashDigest, SHA256_DIGEST_LENGTH,
           signature, strlen(signatrue), r);
if (result != 1) // handle error

注意:我在iOS应用程序中执行此操作,但我认为这与此问题无关.

更新:我最终按照vond的建议使用EVP.公钥是PEM格式的文​​件.这是我的代码:

   FILE *fp = fopen([keyFilePath UTF8String], "r");
    if (!fp) return NO;


    EVP_PKEY *pubKey = PEM_read_PUBKEY(fp,NULL,NULL,NULL);
    EVP_MD_CTX     md_ctx;
    EVP_MD_CTX_init(&md_ctx);

    EVP_VerifyInit(&md_ctx, EVP_sha256());
    EVP_VerifyUpdate (&md_ctx, (unsigned char*)[msgData bytes], [msgData length]);
    int  err = EVP_VerifyFinal (&md_ctx, (unsigned char*) sigData, (unsigned int)[sigData length], pubKey);
    EVP_PKEY_free (pubKey);

vond.. 10

您可以尝试以下方法:

const char *pub_key_pem = ...;

BIO *bio = BIO_new_mem_buf((void*)pub_key_pem, strlen(pub_key_pem));
RSA *rsa_pub = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL);

注意:PEM_read_bio_RSAPublicKey()需要PKCS#1 PEM格式(在第一行/最后一行中带有"BEGIN/END RSA PUBLIC KEY"虚线); 如果您的PEM带有"BEGIN/END PUBLIC KEY",您应该尝试PEM_read_bio_RSA_PUBKEY().请参阅此处和此处的差异说明.

如果你的base64字符串中没有任何这些虚线,你可能会发现将base64字符串解码为二进制缓冲区更容易,然后使用其中一个d2i_RSAPublicKey()d2i_RSA_PUBKEY()从中获取RSA*公钥.

1 个回答
  • 您可以尝试以下方法:

    const char *pub_key_pem = ...;
    
    BIO *bio = BIO_new_mem_buf((void*)pub_key_pem, strlen(pub_key_pem));
    RSA *rsa_pub = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL);
    

    注意:PEM_read_bio_RSAPublicKey()需要PKCS#1 PEM格式(在第一行/最后一行中带有"BEGIN/END RSA PUBLIC KEY"虚线); 如果您的PEM带有"BEGIN/END PUBLIC KEY",您应该尝试PEM_read_bio_RSA_PUBKEY().请参阅此处和此处的差异说明.

    如果你的base64字符串中没有任何这些虚线,你可能会发现将base64字符串解码为二进制缓冲区更容易,然后使用其中一个d2i_RSAPublicKey()d2i_RSA_PUBKEY()从中获取RSA*公钥.

    2023-02-03 08:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有