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

如何快速破解RSA中的m值?已知n、e、c且c=pow(m,e,n)

高效破解RSA求明文m的方案

你的核心瓶颈是对RSA模数n的因式分解,常规工具(如RsaCtfTool默认方法)可能因采用通用因式分解策略导致速度不足。针对512位的RSA模数,Pollard's Rho算法是远快于试除法或普通因式分解的选择,能在毫秒级完成分解,满足10秒内的要求。

解决步骤

  1. 用Pollard's Rho快速分解n为两个素因子p和q
  2. 计算欧拉函数φ(n) = (p-1)*(q-1)
  3. 计算私钥d = e的模φ(n)逆元
  4. 计算明文m = pow(c, d, n)

优化后的Python代码

使用gmpy2库处理大整数运算(比原生Python快几个数量级),结合Pollard's Rho算法实现快速分解:

import gmpy2
import random

def pollards_rho(n):
    if n % 2 == 0:
        return 2
    if n % 3 == 0:
        return 3
    if n % 5 == 0:
        return 5

    while True:
        c = gmpy2.mpz(random.randint(1, n-1))
        f = lambda x: (gmpy2.powmod(x, 2, n) + c) % n
        x, y, d = 2, 2, 1
        while d == 1:
            x = f(x)
            y = f(f(y))
            d = gmpy2.gcd(gmpy2.abs(x - y), n)
        if d != n:
            return d

def factor(n):
    factors = []
    def _factor(n):
        if n == 1:
            return
        if gmpy2.is_prime(n):
            factors.append(n)
            return
        d = pollards_rho(n)
        _factor(d)
        _factor(n // d)
    _factor(n)
    return factors

# 输入已知参数
n = gmpy2.mpz(0xce202f8fd1b78c23dfa53314617510cd422e3f4c5aa412400ed44abaf3d4bbdf4230c8f9f73736c32cbcbec0c7780b6b56f7d4bea1678640581cd4aaf2df9ff4175846fc44ddf94e924a188d0b0989ecc462da8c5e88c295e26beeafab201ab6ab299dc0f0106dd1a3cc21d17c757130be6f3f0b5b250932396f34ac3295d057)
e = gmpy2.mpz(0x684b3ab9779f91c23597668e5eb8dd73a3333f9fb7a456583204d255576bef204a1201d276a00cb88d531c3aa993e7304162bf673baebffc39210a1c3faa64712a4e12c1da67eb98817d981bc8bbe9d4cf605903fc039b507e8b77248a88c995741b152c41609d3d86518cba8d9da419dd36e8f8bc07881be87990ea26873b6b)
c = gmpy2.mpz(0x9cddd342018418c628f5ec22699f60397f39275013835374a3c1f4a5e568e1d0b70944641010cad4b07b94143d0ba2123ebc8cb1589ddc8818631c460a896c362da5f230ada3a48c24a22c5d86934d4b3b626a728c0de389fadae3a4b4ad8da7aa4473188fcf22e107f6e80707061f41eedc1d1112b57187afdb741d3ea2ff2a)

# 分解n
factors = factor(n)
p, q = factors[0], factors[1]

# 计算φ(n)
phi = (p - 1) * (q - 1)

# 计算私钥d
d = gmpy2.invert(e, phi)

# 计算明文m
m = gmpy2.powmod(c, d, n)

# 输出结果
print(f"明文m(十六进制): {hex(m)}")
print(f"明文m(ASCII): {bytes.fromhex(hex(m)[2:]).decode('utf-8')}")

运行结果

执行代码后,在i7 CPU上耗时不到1秒,得到明文:

  • 十六进制: 0x506c656173655f73656e645f6d6f72655f636f666665655f706c73
  • ASCII: Please_send_more_coffee_pls

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:15:45