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

如何优化RSA加密代码以支持e^7及更大指数正常运行

RSA大数运算性能问题解决方案

问题根因

你遇到的性能瓶颈和递归实现的egcd无关:扩展欧几里得的递归深度仅和输入数值的对数成正比,哪怕是1e30量级的数值,递归深度也不会超过100层,完全不会触发栈溢出。
核心性能问题出在两个模块:

  • 试除法实现的is_prime素性检测:当E为e^7+1时数值达到2e22量级,试除法需要遍历到该数的平方根(≈1e11),单次素性检测就要花费数小时,完全不可用
  • generatenextPrime逻辑冗余:没有跳过偶数,每次查找素数会多做一倍的无效素性检测

优化方案

1. 替换素性检测为米勒-拉宾测试

米勒-拉宾是工业界通用的大数素性检测方案,对于小于2^64的数值,使用固定测试基可以实现100%准确的素性判断,耗时仅需几毫秒:

def is_prime(num):
    if num <= 1:
        return False
    elif num <=3:
        return True
    elif num % 2 == 0:
        return False
    # 把num-1写成d*2^s的形式
    d = num - 1
    s = 0
    while d % 2 == 0:
        d //= 2
        s += 1
    # 适用于<2^64的测试基,100%准确率
    test_bases = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
    for a in test_bases:
        if a >= num:
            continue
        x = pow(a, d, num)
        if x == 1 or x == num -1:
            continue
        for _ in range(s-1):
            x = pow(x, 2, num)
            if x == num -1:
                break
        else:
            return False
    return True

2. 优化下一个素数查找逻辑

跳过偶数,减少无效检测:

def generatenextPrime(E):
    # 如果输入是偶数,先转成奇数
    if E % 2 == 0:
        E += 1
    else:
        E += 2
    while True:
        if is_prime(E):
            return E
        E += 2

3. 可选:替换递归egcd为迭代实现(彻底消除递归风险)

def egcd(a, b):
    old_r, r = a, b
    old_s, s = 1, 0
    old_t, t = 0, 1
    while r != 0:
        quotient = old_r // r
        old_r, r = r, old_r - quotient * r
        old_s, s = s, old_s - quotient * s
        old_t, t = t, old_t - quotient * t
    return (old_r, old_s, old_t)

效果验证

优化后哪怕E设置为e^15甚至更高量级,都可以在1秒内完成素性检测、密钥生成的全流程,不会出现卡住的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:02