Crypto ++ RSA e "CipherText inválido"
-
13-09-2019 - |
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"
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 );
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
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.