我正在尝试使用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 = 413
,publicKey = 17
,n = 3233
。
messageToInt = 1500
:dec = 1500
(可以)。 messageToInt = 15000
:dec = 2068
。 (什么?!)。答案 0 :(得分:3)
实际上,它完美有效:
15000 mod 3233 = 2068.
由于RSA依赖于模块化算术,因此您只能使用小于n的纯文本。无法区分纯文本是2068
,2068 + n
,2068 + 2n
,依此类推。
这里的解决方案是将纯文本拆分为小于n的部分,或者增加n直到纯文本适合该部分。