You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python RSA解密报错ValueError: Encryption/decryption failed求助

解决RSA解密时的ValueError: Encryption/decryption failed问题

问题背景

尝试用RSA公钥/私钥对解密.etxt格式的加密消息,运行Python代码时触发ValueError: Encryption/decryption failed错误。公钥和私钥均为.pem格式,作业要求可假设使用标准填充库,若库实例要求填充则设为空字符串。

完整代码

from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding, rsa

# Load the public key
with open('C:/Users/bensg/PycharmProjects/pythonProject/milestone_2_dataset/public_key.pem', 'rb') as key_file:
    public_key = serialization.load_pem_public_key(
        key_file.read(),
        backend=None
    )

# Load the private key
with open('C:/Users/bensg/PycharmProjects/pythonProject/milestone_2_dataset/private_key.pem', 'rb') as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
        backend=None
    )

# Load the encrypted message
with open('C:/Users/bensg/PycharmProjects/pythonProject/milestone_2_dataset/emessage.etxt', 'rb') as file:
    encrypted_message = file.read()

# Decrypt the message using the private key
decrypted_message = private_key.decrypt(
    encrypted_message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

print(decrypted_message.decode())

报错回溯信息

Traceback (most recent call last):
  File "C:\Users\bensg\PycharmProjects\pythonProject\test.py", line 25, in <module>
    decrypted_message = private_key.decrypt(
  File "C:\Users\bensg\PycharmProjects\pythonProject\venv\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 444, in decrypt
    return _enc_dec_rsa(self._backend, self, ciphertext, padding)
  File "C:\Users\bensg\PycharmProjects\pythonProject\venv\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 95, in _enc_dec_rsa
    return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding)
  File "C:\Users\bensg\PycharmProjects\pythonProject\venv\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 161, in _enc_dec_rsa_pkey_ctx
    raise ValueError("Encryption/decryption failed.")
ValueError: Encryption/decryption failed.

可能的解决方案

  • 检查填充方式匹配性:当前使用OAEP填充,若加密时采用的是PKCS1v15填充,会导致解密失败。尝试替换填充方式:
    decrypted_message = private_key.decrypt(
        encrypted_message,
        padding.PKCS1v15()
    )
    
  • 验证密钥配对关系:确保使用的私钥是加密该消息的公钥的配对私钥,避免密钥不匹配。
  • 检查加密消息完整性:确认emessage.etxt文件未损坏、无额外换行/空格,读取时完整加载了所有字节。
  • 调整哈希算法:如果加密时使用SHA1而非SHA256,修改OAEP的哈希配置:
    decrypted_message = private_key.decrypt(
        encrypted_message,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None
        )
    )
    
  • 确认密钥格式正确性:检查.pem密钥是否为标准RSA格式,未被篡改或格式错误。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:35:26