我正在尝试使用 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);
key 来自 Wiki 示例 - privateKey = 413
、publicKey = 17
、n = 3233
。
messageToInt = 1500
:dec = 1500
(没问题)。messageToInt = 15000
:dec = 2068
。 (什么?!)。
最佳答案
实际上,它完美:
15000 mod 3233 = 2068.
由于 RSA 依赖于模运算,因此您只能使用小于 n 的纯文本。无法区分明文是2068
、2068 + n
、2068 + 2n
等。
这里的解决方案是要么将纯文本拆分为小于 n 的部分,要么增加 n 直到纯文本适合那里。
关于c# - 使用 BigInteger 的 Rsa 实现不适用于大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726474/