我想使用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
!
如何解决此问题?
答案 0 :(得分:4)
如果您想单独执行mod和pow步骤,则需要使用BigInteger
。 (如果要使用固定大小的整数类型,则需要自己实现modpow,因为它在.NET中构建的唯一位置是BigInteger
。)double
只能存储整数毫不含糊地高达2 ^ 53-1,而且11 ^ 23更大。