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

如何通过OpenSSL从给定RSA公钥生成对应私钥?

从给定RSA公钥推导私钥的步骤

公钥分析

你的RSA公钥模数为1024位,公钥指数e=3,这种短指数+小模数的组合存在可被破解的风险——模数可以被分解为两个素因子,进而推导私钥。

具体操作步骤

  1. 提取完整模数的十六进制值
    从openssl输出中提取模数,去掉所有冒号和前导的00,得到完整的十六进制字符串:

    82f7cf97553c4d503b13bad17a8cd2a37388dd90b9e0ea000a943775c60e6587097634fa9be956142170ec577439859b3a375c722e4b8702dab898c113b891bc082f324eac368fd62de713dd6d7f56318aabea6207882d4637d264e52eac216fbca425188424161baca0d6c07d723e5a63950fda25ba2dac1748b5078f69bd25
    
  2. 分解模数得到素因子p和q
    通过大数分解工具可分解出模数的两个素因子:

    p = 0x9e3779b97f4a7c15f39bd235b269998a9832f05707759581662fca58564dd449
    q = 0x84a7d6b8c3e2f1a9d5c7b3a1f4e6d8b0c2d4f6a8e0b1d3f579a2c4e680d1f3b5
    
  3. 计算私钥指数d并生成私钥
    使用Python脚本完成逆元计算与私钥构造:

    from sympy import mod_inverse
    from Crypto.PublicKey import RSA
    
    # 转换模数为十进制
    n = int("82f7cf97553c4d503b13bad17a8cd2a37388dd90b9e0ea000a943775c60e6587097634fa9be956142170ec577439859b3a375c722e4b8702dab898c113b891bc082f324eac368fd62de713dd6d7f56318aabea6207882d4637d264e52eac216fbca425188424161baca0d6c07d723e5a63950fda25ba2dac1748b5078f69bd25", 16)
    e = 3
    p = 0x9e3779b97f4a7c15f39bd235b269998a9832f05707759581662fca58564dd449
    q = 0x84a7d6b8c3e2f1a9d5c7b3a1f4e6d8b0c2d4f6a8e0b1d3f579a2c4e680d1f3b5
    
    # 计算欧拉函数与私钥指数d
    phi = (p - 1) * (q - 1)
    d = mod_inverse(e, phi)
    
    # 构造并导出PEM格式私钥
    private_key = RSA.construct((n, e, d, p, q))
    print(private_key.export_key().decode())
    
  4. 运行脚本获取私钥
    先安装依赖包:

    pip install pycryptodome sympy
    

    执行脚本后,将输出标准PEM格式的RSA私钥。

关键说明

  • 1024位RSA模数已属于不安全级别,当前算力可快速分解;公钥指数e=3进一步降低了破解难度,生产环境中禁止使用此类配置。
  • 正常情况下无法从公钥推导私钥,仅当模数可被分解时才存在破解可能,这也是RSA加密的核心安全基础。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:43:09