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

Python中使用字符串形式RSA私钥解密失败,求解决方法

解决字符串RSA私钥解密的AttributeError问题

错误原因

PKCS1_OAEP.new() 要求传入RSA私钥对象,直接传入字符串私钥会触发 AttributeError,因为字符串没有RSA对象的n等核心属性。

解决方案步骤

1. 安装依赖库

确保已安装 pycryptodome(替代停止维护的 pycrypto):

pip install pycryptodome

2. 字符串私钥转RSA对象

使用 Crypto.PublicKey.RSA.import_key() 方法,将包含完整头尾(-----BEGIN RSA PRIVATE KEY-----/-----END RSA PRIVATE KEY-----)的字符串私钥,加载为合法的RSA私钥对象。

3. 匹配指定算法的解密实现

你指定的解密算法是 RSA/ECB/PKCS1Padding,对应PKCS#1 v1.5填充标准,需使用 PKCS1_v1_5 类(PKCS1_OAEP 对应OAEP填充,与需求不符)。

完整代码示例

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

# 示例字符串格式的RSA私钥
private_key_str = """-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
-----END RSA PRIVATE KEY-----"""

# Base64解码后的密文(替换为你的实际密文)
s = base64.b64decode("你的Base64密文内容")

# 1. 转换字符串私钥为RSA对象
private_key = RSA.import_key(private_key_str)

# 2. 创建对应填充标准的解密器
cipher = PKCS1_v1_5.new(private_key)

# 3. 执行解密,返回None表示密文无效或私钥不匹配
decrypted_data = cipher.decrypt(s, None)
if decrypted_data:
    print("解密结果:", decrypted_data.decode('utf-8'))
else:
    print("解密失败:密文无效或私钥不匹配")

额外注意事项

  • 若私钥带密码保护,需在导入时传入密码参数:
    private_key = RSA.import_key(private_key_str, passphrase="你的私钥密码")
    
  • 若加密端实际使用OAEP填充,可替换为 PKCS1_OAEP.new(private_key),但需确保加解密填充标准完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:24