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

Python实现ASCII字符串RSA加解密时如何并行化解密循环提速

优化方案说明

第一步:优先做零成本极速优化(改完速度提升至少100倍,比并行效果还好)

你现在解密慢最大的问题不是没并行,是pow函数用错了:

  • 你现在的写法是pow(j,d)再%n,会先计算出j的d次方这个超级大的整数(可能有几十万位),再做取模,计算量爆炸
  • Python内置的pow原生支持三个参数pow(base, exp, mod),直接用快速模幂算法,计算过程中每一步都取模,完全不会生成超大数,速度是你原来写法的上百倍

修改方法非常简单,把decrypt函数里原来的两行:

P1=pow(j,d)
P=P1%n

直接改成一行:

P = pow(j, d, n)

同理你encrypt函数里的对应代码也可以这么改,加密速度也会大幅提升。绝大多数情况下改完这一行,解密速度就足够用了,根本不需要做并行。


第二步:如果要解密的字符量特别大,再加并行优化

并行原理

解密循环里每个字符的计算都是完全独立的,互相没有依赖,可以同时分给CPU的多个核心一起计算,缩短总耗时。我们直接用Python自带的multiprocessing库实现,不需要安装任何第三方工具。

具体修改步骤

  1. 开头导入并行库
    在你现有import math下面加一行:
import multiprocessing
  1. 单独抽离单个字符的解密逻辑
    加一个小函数,专门用来解密单个字符,方便并行调度:
def decrypt_single(j, d, n):
    P = pow(j, d, n)
    print("value of P is:", P)
    return P
  1. 改写decrypt函数为并行版本
def decrypt(ascii_initial, d, n):
    # 自动获取你电脑的CPU核心数,也可以手动填数字比如4
    core_count = multiprocessing.cpu_count()
    # 创建进程池,自动管理多进程调度
    with multiprocessing.Pool(core_count) as pool:
        # 把所有待解密的字符打包成任务参数列表
        task_params = [(j, d, n) for j in ascii_initial]
        # 并行执行所有任务,返回结果顺序和输入顺序完全一致
        ascii_final = pool.starmap(decrypt_single, task_params)
    return ascii_final
  1. 修复Windows系统运行报错问题
    Windows系统下运行多进程代码,必须把主逻辑代码放到if __name__ == "__main__":的判断下面,不然会重复启动进程报错。你把原来最外层的主循环代码全部套到这个判断里就行:
if __name__ == "__main__":
    cont = 'yes'
    while cont.lower() == 'yes':
        # 这里放你原来的输入、调用RSA的主逻辑代码
        # 注意缩进要对

额外提示

你原来的代码还有缩进语法错误:rsa_algorithm函数里的p,q,r,s = 13,17,61,37之后的代码缩进全错了,都写到函数外面了,运行会报错,先把这些缩进修复再做上面的优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:30:04