RSA C ++的模块化幂运算

问题描述

我正在尝试实施64位RSA加密,作为一个偶然的实验。

在加密过程中,我们执行模幂运算。听起来很简单,所以我通过以下方式做到了:

result = (result * msg) % mod; //Repeat exponent number of times

不幸的是,这要花很长时间。

执行此操作的更快方法是什么?

编辑:

删除了这个问题,因为它没有收到任何答案,现在我意识到这不是明智之举。无论如何,我设法找到了解决方案,这是使用C ++的模块化求幂的快速实现:

include <cstdint>

uint64_t modular_mul(uint64_t a,uint64_t b,uint64_t mod) {
    uint64_t result = 0;
    for (uint64_t current_term = a; b; b >>= 1) {
        if (b & 1) {
            result = (result + current_term) % mod;
        }
        current_term = 2 * current_term % mod;
    }
    return result;
}

uint64_t modular_pow(uint64_t base,uint64_t exp,uint64_t mod) {
    uint64_t result = 1;
    for (uint64_t current_factor = base; exp; exp >>= 1) {
        if (exp & 1) {
            result = modular_mul(result,current_factor,mod);
        }
        current_factor = modular_mul(current_factor,mod);
    }
    return result;
}

我从回答我的问题here用户那里收到了这个解决方案-这只是一个相同的问题,但又被问了,大声笑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)