跳到主要内容
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.

    按字节精确读取密码短语

    只去掉行尾换行符,切勿去掉其他空白字符;从来源到加载函数,密码短语始终保持为 bytes。

    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

相关错误

浏览完整的签名错误库