c# - 使用 BigInteger 的 Rsa 实现不适用于大数字

标签 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);

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

  • messageToInt = 1500:dec = 1500(没问题)。
  • messageToInt = 15000:dec = 2068。 (什么?!)。

最佳答案

实际上,它完美:

15000 mod 3233 = 2068.

由于 RSA 依赖于模运算,因此您只能使用小于 n 的纯文本。无法区分明文是20682068 + n2068 + 2n等。

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

关于c# - 使用 BigInteger 的 Rsa 实现不适用于大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726474/

相关文章:

用 9 替换所有尾随零的正则表达式

c# - 为什么我会收到 CS1666 错误,显然是在运行时?

c# - ASP.Net Core 中没有智能感知

java - Android - 实现加密 IM 的最佳方式

go - 无法在golang中使用公钥加密

C++ 将十六进制 md5 哈希转换为十进制整数

c# - 删除实体集合中的项目

C# TrimStart 奇怪的行为

c# - 使用 C sharp 中的 RSA 对 128 字节的字节数组进行签名

java - 在 Java 中使用 String 创建我自己的 BigInteger