使用 BigInteger 的 Rsa 实现不适用于大数字
Rsa implementation with BigInteger doesn't work for big numbers
我正在尝试使用 BigInteger
获得一个简单的 RSA encryption/decryption。它适用于较小的数字,但不适用于较大的数字:
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
。
- for
messageToInt = 1500
: dec = 1500
(没问题)。
- 对于
messageToInt = 15000
:dec = 2068
。 (什么?!)。
实际上,它工作 完美:
15000 mod 3233 = 2068.
由于 RSA 依赖于模运算,因此您只能使用小于 n 的纯文本。无法区分明文是2068
、2068 + n
、2068 + 2n
等
这里的解决方案是将纯文本拆分成小于 n 的部分,或者增加 n 直到纯文本适合那里。
我正在尝试使用 BigInteger
获得一个简单的 RSA encryption/decryption。它适用于较小的数字,但不适用于较大的数字:
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
。
- for
messageToInt = 1500
:dec = 1500
(没问题)。 - 对于
messageToInt = 15000
:dec = 2068
。 (什么?!)。
实际上,它工作 完美:
15000 mod 3233 = 2068.
由于 RSA 依赖于模运算,因此您只能使用小于 n 的纯文本。无法区分明文是2068
、2068 + n
、2068 + 2n
等
这里的解决方案是将纯文本拆分成小于 n 的部分,或者增加 n 直到纯文本适合那里。