我想计算 a b mod n 以用于 RSA 解密。我的代码(如下)返回不正确的答案。它有什么问题?
unsigned long int decrypt2(int a,int b,int n)
{
unsigned long int res = 1;
for (int i = 0; i < (b / 2); i++)
{
res *= ((a * a) % n);
res %= n;
}
if (b % n == 1)
res *=a;
res %=n;
return res;
}
原文由 Moein Hosseini 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以试试这个 C++ 代码。我已经将它与 32 位和 64 位整数一起使用。我确定我是从 SO 那里得到的。
您可以在第 4 页的文献中找到此算法和相关讨论。 244 个
请注意,在此简化版本中,乘法
result * base
和base * base
会溢出。如果模数大于T
宽度的一半(即超过最大值T
值的平方根),则应使用合适的模乘算法代替 - 请参阅对 原始类型进行模乘法的方法的 答案。