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
相关产品推荐
相关产品推荐

