Crypto ++ RSA e “testo cifrato non valido”
-
13-09-2019 - |
Domanda
Bene, Ho lavorato con il mio inferno personale in questi giorni
Sto avendo qualche difficoltà a decifrare un messaggio che è stato crittografato utilizzando RSA e sono sempre in mancanza di una "RSA / OAEP-MGF1 (SHA-1): non valida testo cifrato "
-
Ho una chiave privata codificata in Base64 e lo carico:
RSA::PrivateKey private_key; StringSource file_pk(PK,true,new Base64Decoder); private_key.Load( file_pk );
-
Ho quindi procedere a decodificare il messaggio facendo:
RSAES_OAEP_SHA_Decryptor decryptor(private_key); AutoSeededRandomPool rng; string result; StringSource(ciphertext, true, new PK_DecryptorFilter(rng, decryptor, new StringSink(result) ) );
Per quanto posso dire, il messaggio deve essere in corso di analizzato senza alcun i problemi. testo cifrato è uno std :: string, in modo che nessun \ 0 alla fine che potrebbe fare qualcosa di inaspettato.
Ho appena però di qualcosa, e che cosa succede se la chiave privata non è corretta ma può essere caricato comunque senza lanciare un errore BER decodifica. Che cosa vorrei che gettare quando decifrare?
La speranza che chiunque può fare luce su questo.
Saluti
Soluzione
Se la chiave è stato effettivamente danneggiato, la funzione di carico dovrebbe hanno fallito. Tuttavia si può chiedere la chiave di auto-test per sé, che dovrebbe rilevare qualsiasi danneggiamento, chiamando Validate
, come:
bool key_ok = private_key.Validate(rng, 3);
Il secondo parametro (qui, 3) specifica la quantità di controllo deve essere fatto. Per RSA, questo farà sì che venga eseguito tutti i test disponibili, anche le più lente / costosi.
Un altro motivo la decodifica potrebbe fallire è se la chiave non è semplicemente quello che è stato utilizzato per cifrare il messaggio originale.
Ovviamente l'ingresso testo cifrato deve essere completamente identica a quanto originariamente prodotta sul lato crittografia. Per il debugging, un buon metodo per controllare questo sarebbe di alimentare il testo cifrato su entrambi i lati in una funzione di hash (convenientemente già disponibili, ovviamente) e confrontando le uscite. Se esadecimale o Base64 il testo cifrato per la trasmissione è necessario annullare che prima di dare per il decryptor RSA.