Перейти к содержимому
ecdsa.com
Python cryptographyPython: пакет cryptography

Сообщение об ошибке

Incorrect password, could not decrypt key

Также выводится как

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

Формулировка по релизам (проверено на каждом): 45.0 и новее — «Incorrect password, could not decrypt key»; 43–44 сообщают о неверном пароле как «Could not deserialize key data… the provided password may be incorrect…»; 42 и более ранние — «Bad decrypt. Incorrect password?».

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

Что это означает

Ключ зашифрован, и cryptography попыталась расшифровать его переданным паролем, но расшифрование не удалось. В зашифрованных закрытых ключах нет «подсказки для пароля»: единственный признак — то, что расшифрованные байты не образуют корректный ключ, поэтому эта ошибка всегда означает, что переданные байты не совпадают с парольной фразой, которая использовалась при шифровании.

Почему это происходит

Как исправить

  1. 1.

    Считывайте парольную фразу байт в байт

    Удаляйте только символы конца строки и никогда не трогайте другие пробельные символы; от источника до функции загрузки передавайте парольную фразу в виде байтов.

    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.

    Проверьте парольную фразу вне кода

    Если OpenSSL принимает парольную фразу, набранную вручную, а ваш код выдаёт ошибку, разница в том, как код её считывает (перевод строки, кодировка). Если OpenSSL тоже выдаёт ошибку, парольная фраза просто неверна.

    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

Связанные ошибки

Открыть всю базу ошибок подписей