使用BigInteger的Rsa实现不适用于大数

时间:2019-08-30 12:07:53

标签: c# rsa biginteger public-key-encryption

我正在尝试使用BigInteger进行简单的RSA加密/解密。它适用于较小的数字,但不适用于较大的数字:

BigInteger messageToInt = 111098; 
BigInteger enc = BigInteger.ModPow(messageToInt, publicKey, n);
BigInteger dec = BigInteger.ModPow(enc, privateKey, n); // should be same as messageToInt
Console.WriteLine(dec);

键来自Wiki示例-privateKey = 413publicKey = 17n = 3233

  • 表示messageToInt = 1500dec = 1500(可以)。
  • 代表messageToInt = 15000dec = 2068。 (什么?!)。

1 个答案:

答案 0 :(得分:3)

实际上,它完美有效:

15000 mod 3233 = 2068.

由于RSA依赖于模块化算术,因此您只能使用小于n的纯文本。无法区分纯文本是20682068 + n2068 + 2n,依此类推。

这里的解决方案是将纯文本拆分为小于n的部分,或者增加n直到纯文本适合该部分。