2017-09-19 15 views
-2

어리석은 질문에 대해 사과드립니다. 많은 예제를 보았지만 답변을 찾을 수 없습니다. 는 crypt와 RSA와 파일의 암호를 해독하려고 :RSA_private_decrypt 오류

암호화

ptext = (unsigned char *)malloc(key_size); 
    ctext = (unsigned char *)malloc(key_size); 
    while (1) { 
      inlen = _read(in, ptext, key_size); 
      if (inlen <= 0) break; 
      outlen = RSA_public_encrypt(inlen, ptext, ctext, pubKey, 
    RSA_PKCS1_PADDING); 
      if (outlen != RSA_size(pubKey)) exit(-1); 
      _write(out, ctext, outlen); 
     } 

해독 :

while (1) {  
     inlen = _read(in, ctext, key_size); 
     printf("Read %i bytes\n", inlen); 
     if (inlen <= 0) break; 
     outlen = RSA_private_decrypt(key_size-11, ctext, ptext, privKey, RSA_PKCS1_PADDING); 
     printf("RSA returns %i\n", outlen); 
     if (outlen < 0) 
     { 
      fprintf(stderr, "OpenSSL error: %s\n", ERR_error_string(ERR_get_error(), NULL)); 
      exit(0); 
     } 
     _write(out, ptext, outlen); 
} 

프로그램 출력 :

Read 431 bytes 
RSA returns -1 
OpenSSL error: error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error 

key_size 또는 key_size-11 -> 변경없이 . 이 오류를 무시하려면 plz를 도와주세요.

+0

'RSA_size (pubKey)'바이트의 데이터를 쓰고'key_size' 바이트를 다시 읽는 중입니다. 이 올바른지? 'key_size'는'RSA_size (pubKey)'입니까? 무엇이'key_size'에서 11을 빼내려고 결정 했습니까? –

+0

읽기 값을 rsa_size (pubKey)로 변경했지만 동일한 오류가 발생했습니다. – j0hn

+0

RSA_size (pubKey) = 512, 512 = key_size – j0hn

답변

0

RSA 암호 해독의 경우 flen은 이 아니고 RSA_size(pubkey) - 11이 아니어야합니다. 따라서

outlen = RSA_private_decrypt(RSA_size(pubKey), ctext, ptext, privKey, RSA_PKCS1_PADDING); 

과 같은 것을 사용해야합니다. 해독 된 일반 텍스트는 ctext[0] ... ctext[outlen-1]에 포함되어야합니다.

+0

여전히 같은 오류 오류 : 0407109F : RSA -1 반환 OpenSSL에 오류 512 바이트 읽기 루틴 RSA : RSA_padding_check_PKCS1_type_2 오류 복호 PKCS – j0hn

0

이것은 내가 광산 프로젝트에서 RSA 암호 기능을 사용한 방법입니다. 구현과 비교해보기

int rsa_oaep_encrypt(EVP_PKEY *publicKey, const unsigned char *plaintext, const size_t plaintextLen, unsigned char *ciphertext, size_t *ciphertextLen) 
{ 
int sts = -1; 
if ((*ciphertextLen = RSA_public_encrypt(plaintextLen, plaintext, ciphertext, publicKey->pkey.rsa, RSA_PKCS1_OAEP_PADDING)) > 0) 
    sts = 0; 
return sts; 
} 

int rsa_oaep_decrypt(EVP_PKEY *privateKey, const unsigned char *ciphertext, const size_t ciphertextLen, unsigned char *plaintext, size_t *plaintextLen) 
{ 
int sts = -1; 
if ((*plaintextLen = RSA_private_decrypt(ciphertextLen, ciphertext, plaintext, privateKey->pkey.rsa, RSA_PKCS1_OAEP_PADDING)) > 0) 
    sts = 0; 
return sts; 
}