Aller au contenu
ecdsa.com
Python cryptographycryptography (Python)

Message d’erreur

Incorrect password, could not decrypt key

Également affiché sous la forme

  • ValueError: Incorrect password, could not decrypt key
  • Bad decrypt. Incorrect password?

Libellé selon la version (vérifié sur chacune) : 45.0 et les versions ultérieures « Incorrect password, could not decrypt key » ; 43 et 44 signalent un mot de passe erroné par « Could not deserialize key data… the provided password may be incorrect… » ; 42 et les versions antérieures « Bad decrypt. Incorrect password? ».

Python cryptography — ValueError from load_pem_private_key / load_der_private_key / pkcs12.load_key_and_certificates

Ce que cela signifie

La clé est chiffrée et cryptography a tenté de la déchiffrer avec le mot de passe que vous avez fourni, mais le déchiffrement a échoué. Les clés privées chiffrées ne contiennent aucun « indice de mot de passe » – le seul signal est que les octets déchiffrés ne forment pas une clé valide –, si bien que cette erreur signifie toujours que les octets passés ne sont pas la phrase de passe utilisée lors du chiffrement.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Lire la phrase de passe à l’octet près

    Ne retirez que les fins de ligne, jamais les autres caractères d’espacement, et conservez la phrase de passe sous forme d’octets, de la source jusqu’au chargeur.

    python
    from pathlib import Path
    
    passphrase = Path("/run/secrets/key_passphrase").read_bytes().rstrip(b"\r\n")
    key = serialization.load_pem_private_key(pem, password=passphrase)
  2. 2.

    Confirmer la phrase de passe en dehors de votre code

    Si OpenSSL accepte la phrase de passe saisie à la main mais que votre code échoue, la différence tient à la façon dont le code la lit (saut de ligne, encodage). Si OpenSSL échoue aussi, la phrase de passe est tout simplement erronée.

    bash
    # Prompts for the passphrase; "bad decrypt" means the passphrase is wrong, not the file
    openssl pkey -in encrypted.pem -noout && echo "passphrase OK"
    printf '%s' "$KEY_PASSPHRASE" | wc -c    # length without a trailing newline

Erreurs associées

Parcourir toute la base de données des erreurs de signature