我有我需要用來驗證數字簽名的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