问题描述
我正在尝试实施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 (将#修改为@)