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

编写RSA密码系统时遭遇溢出问题

RSA解密时(m^d)%n的溢出问题解决方法

直接计算m^d必然溢出——因为RSA的私钥指数d通常是几百位的大整数,中间结果会大到超出任何常规数值类型的存储范围。解决这个问题的核心是用快速幂取模算法,全程在模n的范围内计算,避免生成超大中间值。

核心思路

把高次幂运算拆解成一系列小的乘法和平方操作,每一步运算后立即对n取模,确保所有中间结果始终保持在n的大小范围内(远小于直接计算m^d的结果)。

实现示例

用Python内置函数(推荐)

Python原生支持大整数,而且内置的pow函数直接支持三参数形式,是经过优化的模幂实现,完全不会溢出:

decrypted = pow(m, d, n)

手动实现快速幂取模(理解原理用)

如果需要自己实现算法逻辑,参考以下代码:

def mod_pow(base, exp, mod):
    result = 1
    base = base % mod  # 先将底数缩小到模范围内
    while exp > 0:
        # 若指数为奇数,将当前底数乘入结果并取模
        if exp % 2 == 1:
            result = (result * base) % mod
        # 指数右移一位(等价于除以2)
        exp = exp >> 1
        # 底数平方后取模
        base = (base * base) % mod
    return result

# 调用示例
decrypted = mod_pow(m, d, n)

其他语言注意事项

如果是C/C++这类静态类型语言,除了用快速幂取模逻辑,还要搭配大整数库(比如GMP)来处理超大数值的模运算,避免原生整数类型的溢出限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:55:17