【发布时间】:2020-03-03 05:07:17
【问题描述】:
我正在尝试实施 RSA 加密,但每当实施解密部分时,我都会得到错误的答案。
加密之前的所有内容都给了我正确的值:n 是 187,phi 是 160,e 是 3,私钥 d 是 107,密文 c 是 183。然后,我首先计算 c^d(给出me -9223372036854775808) 然后对该结果执行 mod(n) 以获得 -162(假设解密)。
我认为错误出现在 c^d 部分,但我无法确定出了什么问题。任何帮助,将不胜感激。
int main()
{
long p = 11;
long q = 17;
long n = p * q;
double phi = (p-1) * (q-1);
int e = 3;
while(e < phi) {
if(GCD(e, phi) == 1) break; //GCD is a function that returns the GCD
else e++;
}
int k = 2;
// private key computation
double d = (1+(k*phi))/e;
double msg = 72;
long c = pow(msg, e);
// c mod(n)
c %= n;
long decr = pow(c, d);
decr %= n;
return 0;
}
【问题讨论】:
-
使用GMP,RSA并不意味着使用小模数。此外,常见的方法是选择 e 而不是选择素数。
-
当你说选择 e 然后选择素数时,我上面的方法有什么不同吗?我选择 e 然后选择最接近的互质数。
-
e通常被选为费马素数,以便它包含更少的位以减少计算量。不过,这是另一个故事,因为它可以发动力量攻击。你选择的素数比 e
标签: c++ encryption rsa