C#中的Math.Pow没有返回正确的值

时间:2018-01-07 04:04:07

标签: c# encryption rsa

我想使用C#来演示RSA加密。我选择p = 17和q = 11。所以我得到N = 187,e = 7,d = 23。

当我选择字符X(ASCII中十进制的88)并加密它时:

double enCrypt = Math.Pow(88, 7) % 187;

并返回值enCrypt =11

然后,我想解密它,所以我计算:

double deCrypt = Math.Pow(11, 23) % 187;

但它没有返回到原始值88,而是deCrypt=149

如何解决此问题?

1 个答案:

答案 0 :(得分:4)

如果您想单独执行mod和pow步骤,则需要使用BigInteger。 (如果要使用固定大小的整数类型,则需要自己实现modpow,因为它在.NET中构建的唯一位置是BigInteger。)double只能存储整数毫不含糊地高达2 ^ 53-1,而且11 ^ 23更大。