2011-05-16 5 views
2

OpenSSL 암호화 라이브러리를 사용하려고하는데, 내가 본 모든 예에서 중요한 부분 인 호출에서 충돌이 발생합니다. 여기가 최대 설정되어 방법은 다음과 같습니다왜 RSA_size가 충돌합니까?

BIO* bp = BIO_new_mem_buf(_publicKey, -1); // Create a new memory buffer BIO. 
RSA* pubKey = PEM_read_bio_RSA_PUBKEY(bp, 0, 0, 0); // And read the RSA key from it. 

unsigned char encryptedRandKey[RSA_size(pubKey)]; 
BIO_free(bp); 

_publicKey합니다 (-----BEGIN XXX----- 등 포함) PEM 형식의 RSA 키를 포함하는 null로 끝나는 문자열입니다. RSA_size에서 액세스 권한이 잘못되어 충돌합니다.

BIO_free을 제거해도 상관 없습니다.

아이디어가 있으십니까? 감사!

답변

3

null이 아닌지 확인하기 위해 반환 값 PEM_read_bio_RSA_PUBKEY()을 확인해야합니다. 대부분 _publicKey의 내용은 올바른 형식의 키가 아니므로 pubKey은 NULL입니다.

+1

Duh. 명백한 것에 대한 포인터 주셔서 감사합니다! _publicKey가 합법적이므로 문제는 현재 문제입니다. 내가 볼 수있는 유일한 것은 개조가 어떻게 든 제거되었다는 것입니다. 모든 것은 XML에서 데이터베이스로 돌아오고, 그 요소의 XML 덤프는 콘솔에 ----- BEGIN 등의 개행을 표시합니다. 그러나 _publicKey의 printf에는 개행 문자가없는 것 같습니다. – Oscar

+1

@Oscar - 예, OpenSSL은 PEM 인코딩에서 새로운 라인을 필요로합니다. [OpenSSL에서 공개 키/개인 키를 설정할 수 없음] (http://stackoverflow.com/a/29929327/608639) 및 해답에 대한 설명을 참조하십시오. (그리고 낡은 실을 파헤쳐서 미안하다.) – jww

+0

해를 끼치 지 마십시오. JWW에게 감사드립니다. – Oscar

1

PEM_read_bio_RSA_PUBKEY 대신 PEM_read_bio_RSAPublicKey을 시도하십시오.

관련 문제