我有我需要用来验证数字签名的RSA base64编码公钥。我不明白如何用公钥来初始化RSA。openssl初始化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);
您是PEM格式的关键吗?如果是这样,[pem(3)](http://www.openssl.org/docs/crypto/pem.html#)与适当的内存BIO一起可能是你想要的。 – WhozCraig
它只是base64字符串。我可以制作一个pem文件,但这不是不必要的复杂吗? – Maggie