Python代码执行decrypt方法无返回值问题求助
问题分析与修复
核心问题
解密逻辑里的txt.decode()是错误操作——加密后生成的是二进制密文字节串,解密时需要直接传入字节数据,而非先解码成字符串。
具体错误点
- 加密流程:
txt.encode()将字符串转为字节,加密后输出的negocio是二进制密文。 - 解密流程:若直接把加密得到的字节串传给
txt参数,执行txt.decode()会试图将非文本编码的密文转成字符串,这会触发编码错误,导致代码静默崩溃(无任何输出)。
修复后的代码
from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP def enc_pubK(value, txt, path_chv_pub=None, path_chv_priv=None): if value == 1: if path_chv_pub: with open(str(path_chv_pub), 'rb') as arq_pub: chave_publica = RSA.import_key(arq_pub.read()) cipher = PKCS1_OAEP.new(chave_publica) negocio = cipher.encrypt(txt.encode()) print(negocio) return negocio # 返回密文,方便后续解密调用 elif value == 0: if path_chv_priv: with open(str(path_chv_priv), "rb") as arq_pri: cha_pri = RSA.import_key(arq_pri.read()) decipher = PKCS1_OAEP.new(cha_pri) vigor = decipher.decrypt(txt) # 直接传入字节密文 print(vigor.decode()) # 解密后转字符串输出 return vigor.decode()
额外优化建议
- 加密后返回密文而非仅打印,方便后续解密直接调用结果。
- 增加异常捕获(如文件不存在、密钥格式错误、解密失败等),便于排查问题。
- 用
elif替代独立if,逻辑更严谨。
内容的提问来源于stack exchange,提问作者Benigno Bello
相关产品推荐
相关产品推荐

