문제

글쎄, 나는 요즘 내 개인 지옥을 겪어 왔어

RSA를 사용하여 암호화 된 메시지를 해독하는 데 어려움을 겪고 있으며 항상 "RSA/OAEP-MGF1 (SHA-1) : 유효하지 않은 CIPHERTEXT"로 실패합니다.

  1. Base64에 인코딩 된 개인 키가 있으며로드합니다.

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. 그런 다음 다음을 수행하여 메시지를 해독합니다.

    RSAES_OAEP_SHA_Decryptor decryptor(private_key);
    
    AutoSeededRandomPool rng;
    
    string result;
    StringSource(ciphertext, true,
        new PK_DecryptorFilter(rng, decryptor,
            new StringSink(result)
        )
    );
    

내가 알 수있는 한, 메시지는 아무런 문제없이 구문 분석되어야합니다. ciphertext는 std :: string이므로 끝에 예상치 못한 일을 할 수 있습니다.

나는 단지 무언가를했지만 개인 키가 잘못되었지만 BER 디코드 오류를 던지지 않고 어쨌든로드 할 수 있다면 어떻게해야합니까? 해독 할 때 그 날은 무엇을 던질까요?

누구나 이것에 대해 약간의 빛을 발할 수 있기를 바랍니다.

건배

도움이 되었습니까?

해결책

키가 실제로 손상된 경우로드 기능이 실패했을 것입니다. 그러나 열쇠를 스스로 테스트하도록 요청할 수 있습니다. Validate, 처럼:

bool key_ok = private_key.Validate(rng, 3);

두 번째 매개 변수 (여기, 3)는 수행 할 수있는 양을 지정합니다. RSA의 경우 이렇게하면 사용 가능한 모든 테스트, 느리게/비싼 테스트도 실행됩니다.

디코딩이 실패 할 수있는 또 다른 이유는 키가 단순히 원래 메시지를 암호화하는 데 사용 된 것이 아니기 때문입니다.

분명히 암호 텍스트 입력은 원래 암호화 측면에서 생성 된 것과 완전히 동일해야합니다. 디버깅의 경우,이를 확인하는 한 가지 좋은 방법은 양쪽의 암호 텍스트를 양쪽의 해시 기능 (물론 편리하게 사용할 수 있음)으로 공급하고 출력을 비교하는 것입니다. 육각 또는 Base64가 암호 텍스트를 인코딩 한 경우 전송을 위해 취소해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top