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 "

  1. 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 );
    
  2. 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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top