2013-01-08 5 views
3

내가하려는 것은 무작위 RSA 키를 생성 한 다음 프로그램을 종료하기 전에 저장하는 것입니다. 이 부분은 RSA_generate_key, PEM_write_bio_RSAPrivateKey 및 PEM_write_bio_RSA_PUBKEY를 사용하여 올바르게 작동합니다. 나는 또한 RSA 구조체를 사용하여 RSA_generate_key가 반환 한 것을 암호화/해독 할 수있다.RSA 공개 키와 개인 키를 단일 RSA 구조체로 읽는 방법?

그러나 내 프로그램이 다시 시작되고 이전에 저장 한 키를 다시 읽으 려 할 때 내 문제가 발생합니다. 키를 가져 오기 위해 PEM_read_bio_RSAPrivateKey 및 PEM_read_bio_RSA_PUBKEY를 사용할 수 있지만 RSA_generate_key에 의해 저장되는 것과 비슷한 동일한 RSA 구조로 가져와야합니다.

내 코드는 다음과 같습니다. 키가 얼마나 큰지 알 수있는 작은 헤더와 함께 메모리에 키가 저장되어 있습니다. 헤더 바로 뒤의 개인 키 시작과 공개 키는 개인 키 바로 다음에 저장됩니다.

privateKey = (uint8_t *) (buffer + rsaStruct->hdrSize); 
publicKey = (uint8_t *) (privateKey + rsaStruct->privateKeyLength); 

bioPrivate = BIO_new_mem_buf((void *) privateKey, rsaStruct->privateKeyLength); 
bioPublic = BIO_new_mem_buf((void *) publicKey, rsaStruct->publicKeyLength); 

bioPrivate = BIO_new_mem_buf((void *) privateKey, rsaStruct->privateKeyLength + rsaStruct->publicKeyLength); 
if(bioPrivate == NULL || bioPublic == NULL) { 
    fprintf(stderr, "%s: BIO_new_mem_buf failed!\n", __FUNCTION__); 
    return ECE_RSA_ERROR_BIO_CREATION_FAILED; 
} 

PEM_read_bio_RSAPrivateKey(bioPrivate, &keyPair, NULL, NULL); 
PEM_read_bio_RSA_PUBKEY(bioPublic, &keyPair, NULL, NULL); 

BIO_free(bioPrivate); 
BIO_free(bioPublic); 

동일한 RSA 구조로 전송하려고하면 작동하지 않는 것 같습니다. 암호를 잘 암호화 할 수는 있지만 암호 해독은 실패합니다. 이는 공개 키가 검색에 마지막으로 사용 된 키이고 암호화에 사용 된 키이기 때문일 수 있습니다. 두 번째 호출이 내 RSA 구조체의 주소를 덮어 쓰는 경우 공개 키 만있는 RSA 구조로 끝납니다.

누군가 공개 키와 개인 키를 같은 RSA 구조로 가져 오는 방법을 말해 줄 수 있다면 좋을 것입니다.

답변

0

RSA 비공개 키와 비교하여 공개 키 추가는 공개 지수 만 포함합니다. 공개 키에서 개인 키 구조로 복사하면 모든 것이 작동합니다.

관련 문제