Saltar al contenido
ecdsa.com
Python cryptographycryptography de Python

Mensaje de error

Incorrect password, could not decrypt key

También se muestra como

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

Texto según la versión (comprobado en cada una): 45.0 y posteriores, «Incorrect password, could not decrypt key»; 43 y 44 notifican una contraseña incorrecta como «Could not deserialize key data… the provided password may be incorrect…»; 42 y anteriores, «Bad decrypt. Incorrect password?».

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

Qué significa

La clave está cifrada y cryptography intentó descifrarla con la contraseña proporcionada, pero el descifrado falló. Las claves privadas cifradas no llevan ninguna «pista de contraseña» —la única señal es que los bytes descifrados no forman una clave válida—, así que este error siempre significa que los bytes que pasas no son la frase de contraseña que se usó al cifrarla.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Leer la frase de contraseña con sus bytes exactos

    Elimina solo los finales de línea, nunca otros espacios en blanco, y conserva la frase de contraseña como bytes desde el origen hasta el cargador.

    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.

    Confirmar la frase de contraseña fuera de tu código

    Si OpenSSL acepta la frase de contraseña escrita a mano pero tu código falla, la diferencia está en cómo la lee el código (salto de línea, codificación). Si OpenSSL también falla, la frase de contraseña simplemente es incorrecta.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma