Question

Eh bien, je vais dans mon enfer personnel ces jours

Je suis un peu de difficulté un message qui déchiffrer utilisait crypté RSA et je suis toujours défaut avec un « RSA / OAEP-MGF1 (SHA-1): invalide cryptogramme "

  1. J'ai une clé privée codée en base64 et je le charge:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. Je procède alors à décoder le message en faisant:

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

Pour autant que je peux dire, doit être en cours d'analyse le message sans problèmes. cryptogramme est un std :: string, donc pas \ 0 à la fin qui pourrait faire quelque chose d'inattendu.

Je viens bien de quelque chose, et si la clé privée est incorrect mais peut être chargé de toute façon sans lancer une erreur de décodage BER. Quoi serait-ce jeter lors du déchiffrement?

L'espoir que tout le monde peut faire la lumière sur ce point.

Vive

Était-ce utile?

La solution

Si la clé est réellement endommagée, la fonction de charge devrait être échoué. Cependant, vous pouvez demander à la clé de l'auto-test lui-même, qui devrait détecter toute corruption, en appelant Validate, comme:

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

Le second paramètre (ici, 3) précise combien la vérification à faire. Pour RSA, cela lui fera exécuter tous les tests disponibles, même les plus lents / coûteux.

Une autre raison pour le décodage peut échouer est si la clé est tout simplement pas celui qui a été utilisé pour chiffrer le message d'origine.

Il est évident que l'entrée cryptogramme doit être tout à fait identique à ce qui a été produit à l'origine du côté de cryptage. Pour le débogage, un bon moyen de vérifier ce serait pour alimenter le cryptogramme des deux côtés en une fonction de hachage (pratique déjà disponible pour vous, bien sûr) et à comparer les résultats. Si vous HEX ou codé en base64 le texte chiffré pour la transmission, vous devez le défaire avant de donner à la décrypteur RSA.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top