2009-12-04 8 views
1

Eh bien, je l'ai été dans mon enfer va personnel ces jours-ciCrypto ++ RSA et « cryptogramme non valide »

J'ai du mal à décrypter un message crypté RSA et je suis toujours à défaut d'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 passe ensuite à 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 aucun problème . ciphertext est une chaîne std :: string, donc pas de 0 à la fin qui pourrait faire quelque chose d'inattendu.

Je viens juste de quelque chose, et si la clé privée est incorrecte mais peut être chargée de toute façon sans lancer une erreur de décodage BER. Qu'est-ce que lancerait lors du décryptage?

Espérons que n'importe qui peut faire la lumière là-dessus.

Vive

Répondre

0

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 entraînera l'exécution de tous les tests disponibles, même les plus lents/les plus coûteux.

Une autre raison pour laquelle le décodage peut échouer est que la clé n'est tout simplement pas celle qui a été utilisée pour chiffrer le message d'origine.

Il est évident que l'entrée du texte chiffré doit être complètement identique à celle qui a été produite du côté du chiffrement. Pour le débogage, un bon moyen de vérifier cela serait de faire passer le texte chiffré des deux côtés dans une fonction de hachage (bien sûr déjà disponible pour vous) et de comparer les sorties. Si vous avez codé en hexadécimal ou en base64 le texte chiffré pour la transmission, vous devez l'annuler avant de le donner au décrypteur RSA.