디지털 서명을 확인하는 데 사용해야하는 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
참고 :
내 코드가 같이 보입니다 나는 아이폰 OS 응용 프로그램에서이 일을하고 있지만, 나는이 질문에 대한 무관하다 생각합니다.
업데이트 : 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 형식입니까? 그렇다면 적절한 메모리 BIO와 함께 [pem (3)] (http://www.openssl.org/docs/crypto/pem.html#)가 원하는 것일 수 있습니다. – WhozCraig
그것은 단지 base64 문자열입니다. 나는 그것에서 파일을 만들 수 있지만 그 불필요한 합병증 아닌가요? – Maggie