Frage

Nun, ich habe heutzutage meine persönliche Hölle durchgemacht

Ich habe einige Probleme, eine Nachricht zu entschlüsseln, die mit RSA verschlüsselt wurde, und ich versage immer mit einem "RSA/OAEP-MGF1 (SHA-1): Ungültiger Chiffretext".

  1. Ich habe einen privaten Schlüssel, der in Base64 codiert ist, und lade es:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. Ich gehe dann weiter, um die Nachricht zu entschlüsseln, indem ich:

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

Soweit ich das beurteilen kann, sollte die Nachricht ohne Probleme analysiert werden. CipheText ist eine Std :: String, also nein 0 am Ende, das etwas Unerwartetes tun könnte.

Ich habe nur etwas von etwas, und was ist, wenn der private Schlüssel falsch ist, aber trotzdem ohne einen BER -Dekodierungsfehler geladen werden kann. Was würde das beim Entschlüsseln werfen?

Ich hoffe, dass jeder Licht in das Licht werfen kann.

Prost

War es hilfreich?

Lösung

Wenn der Schlüssel tatsächlich beschädigt war, hätte die Lastfunktion fehlschlagen müssen. Sie können jedoch den Schlüssel zum Selbsttest selbst bitten, der jede Korruption durch Anrufe erkennen sollte Validate, wie:

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

Der zweite Parameter (hier, 3) gibt an, wie viel Überprüfungen zu tun sind. Für RSA führt dies dazu, dass es alle verfügbaren Tests durchführt, sogar die langsamen/teuren.

Ein weiterer Grund, warum die Dekodierung scheitern könnte, ist, wenn der Schlüssel einfach nicht derjenige ist, mit dem die ursprüngliche Nachricht verschlüsselt wurde.

Offensichtlich muss die Ciphertext -Eingabe vollständig identisch sein mit dem, was ursprünglich auf der Verschlüsselung hergestellt wurde. Für das Debuggen wäre eine gute Möglichkeit, dies zu überprüfen, darin, den Chiffretext auf beiden Seiten in eine Hash -Funktion (natürlich bereits zur Verfügung zu stellen) zu übernehmen und die Ausgänge zu vergleichen. Wenn Sie Hex oder Base64 den Chiffretext für die Übertragung codiert haben, müssen Sie dies rückgängig machen, bevor Sie es dem RSA entschlüsselt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top