如何解决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 举报,一经查实,本站将立刻删除。