2014-09-17 5 views
-1

생성 된 RSA pubkey로 문자열을 암호화하는 데 문제가 있습니다. 이 키는 서명되지 않은 char 배열에 저장됩니다. 저는 여기에 현재RSA pubkey로 C 암호화 문자열

RSA      *rsa = NULL; 
BIO      *key_bio; 

static const int  bit = 2048; 

key_bio = BIO_new_mem_buf(testkey, -1); 

if(key_bio == NULL){ 
    printf("No key bio \n"); 
    exit(1); 
} 

rsa = PEM_read_bio_PUBKEY(key_bio, NULL, NULL, NULL); 

if(rsa == NULL){ 
    fprintf(stderr, "Error loading RSA Public Key File.\n"); 


    ERR_print_errors_fp(stderr); 
    exit(1); 
} 

// Alloc the encrypted buffer 
e->enckey = calloc(1, 2048); 

int res = RSA_public_encrypt(strlen((char*)e->key->key), e->key->key, e->enckey, rsa, RSA_PKCS1_PADDING); 

if(res == -1){ 
    printf("Failed to encrypt AES key \n"); 
    printf("Error: strerror(errno)\n"); 
} 

그러나, 문제가 해결되지 않는 암호화를 수행하는이 코드를 작성한 해당 키

char *testkey = "-----BEGIN RSA PUBLIC KEY-----\n" 
     "MIIBCgKCAQEA3InRLxdx25R6eA4PyXcYzKyFiJULS3ypqlETztAW488XkEM263vJ\n" 
     "SY5xpfwph9thcsjYUI3H60qxaTRVhNxbzbsG0ELkEudm4cLMn2oVpphT4cB3zx6V\n" 
     "az1cuzIfmL34M8YiRQw6MvdaDJS34y15dXDm0BSXF7sanZaYrHvu84j5mQVK0OWq\n" 
     "kvpVs+J55xul/IQsSEWr94HjPupdDYzGXsEiQ7p5cNrvKgjGKqKV177EYROVVgVp\n" 
     "gAWm0G6aDrfDLKqsXo8RXj4dyyuZqoL2e7Fa46Gz4I+tb2SWkEwLGpqBe/CUDzDh\n" 
     "9aLhaTijDQhcaR5+u88XNbarckKU96wiiQIDAQAB\n" 
     "-----END RSA PUBLIC KEY-----\0"; 

의 예입니다. 키의 형식에 관한 것 같지만 변환 방법을 알아 내지 못하고 RSA 구조체를 사용하여 암호화를 수행합니다.

아이디어가 있으십니까?

+1

"이 작동하지 않음"이란 무엇을 의미합니까? 그것은 컴파일합니까? 실행됩니까? 오류 메시지가 나타 납니까? 출력을 받고 있습니까? 예상되는 행동은 무엇입니까? (또한 'e'가 선언 된 곳은 무엇입니까?이 코드가 누락 된 이유는 무엇입니까?) –

+0

E는 부적합합니다. 내가 암호화 할 데이터가있는 구조체. 또한 암호화 된 데이터에 대한 버퍼가 저장됩니다. RSA = NULL이므로 프로그램이 종료되고 다음과 같은 오류를 인쇄합니다. 공개 키가 필요합니다. E가 다른 함수에서이 함수로 전달됩니다. –

+0

[c를 사용하는 [rsa encryption decryption]의 가능한 복제본 (http://stackoverflow.com/questions/15652816/rsa-encryption-decryption-using-c) –

답변

0

이 INSEAD를 사용하여, 지금은 잘 동작하는 것 :

PEM_read_bio_RSAPublicKey(key_bio, &rsa, 0, NULL); 

그 이유는 아마도 KEY의 형식 함께 할 수있는 뭔가가있다.