1
RSA 비공개 키로 메시지에 서명하려고합니다. pkey에 개인 키를 읽은 다음 openssl 위키에서 말한대로 문자열에 서명하지만 마지막 단계에서는 실패합니다. 프로그램에서 주석 처리 된 행에서 항상 0을 리턴합니다. 이는 기호가 실패했음을의 L합니다. 아무도 내가 무엇이 잘못되었는지 찾아내는 데 도움이 될 수 있습니까?RSA 로그인 OPENSSL
void main() {
EVP_MD_CTX * mdctx ;
EVP_PKEY * pkey ;
char dmessage[20] = "The messages";
int ret = 0;
FILE * fp;
unsigned char * sig = NULL;
size_t * slen = malloc(sizeof(size_t));
fp = fopen ("privkey.pem", "r");
if (fp == NULL) exit (1);
pkey = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
fclose (fp);
if (pkey == NULL) {
ERR_print_errors_fp (stderr);
exit (1);
}
if(!(mdctx = EVP_MD_CTX_create())) goto err;
if(1 != EVP_DigestSignInit(mdctx, NULL, EVP_sha256(), NULL, pkey)) goto err;
if(1 != EVP_DigestSignUpdate(mdctx, dmessage, 12)) goto err;
if(1 != EVP_DigestSignFinal(mdctx, NULL, slen)) goto err;
if(!(sig = OPENSSL_malloc(sizeof(unsigned char) * (int)(*slen)))) goto err;
if(1 != (ret = EVP_DigestSignFinal(mdctx, sig, slen))) goto err;//*****it return 0 here,which means sign failed
ret = 1;
err:
if(ret != 1)
{
printf("%d somthing wrong\n",ret);
}
/* Clean up */
if(sig && !ret) OPENSSL_free(sig);
if(mdctx) EVP_MD_CTX_destroy(mdctx);
return;
}
감사합니다.
내가 리눅스 민트 17에있는 OpenSSL 1.0.1j를 사용하고, 그리고
openssl genrsa -out privkey.pem 256
이렇게하면 문제가 해결됩니다. 도와 주셔서 감사합니다! – Dacheng