Pergunta

Bem, eu tenho passado pelo meu inferno pessoal hoje em dia

Estou tendo problemas para descriptografar uma mensagem que foi criptografada usando RSA e estou sempre falhando com um "RSA/OAEP-MGF1 (SHA-1): Ciphertext inválido"

  1. Eu tenho uma chave privada codificada na base64 e carrego:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. Eu então continuo para decodificar a mensagem fazendo:

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

Até onde eu sei, a mensagem deve estar sendo analisada sem problemas. O CipherText é uma string std ::, então não 0 no final que poderia fazer algo inesperado.

Eu só apesar de alguma coisa, e se a chave privada estiver incorreta, mas puder ser carregada de qualquer maneira sem lançar um erro de decodificação do BER. O que isso jogaria quando descriptografar?

Espero que alguém possa esclarecer isso.

Felicidades

Foi útil?

Solução

Se a chave foi realmente corrompida, a função de carga deve ter falhado. No entanto, você pode pedir a chave para o próprio teste, o que deve detectar qualquer corrupção, ligando Validate, Curti:

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

O segundo parâmetro (aqui, 3) especifica quanta verificação a ser feita. Para a RSA, isso fará com que todos os testes disponíveis, até os lentos/caros.

Outro motivo pelo qual a decodificação pode falhar é se a chave simplesmente não for a usada para criptografar a mensagem original.

Obviamente, a entrada da CifraTeira deve ser completamente idêntica ao que foi produzido originalmente no lado criptografado. Para a depuração, uma boa maneira de verificar isso seria alimentar o texto cifrado de ambos os lados em uma função de hash (convenientemente disponível para você, é claro) e comparando as saídas. Se você Hex ou Base64 codificar o texto cifrado para transmissão, você deve desfazer isso antes de entregá -lo ao descripto de RSA.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top