由于指数大小有限,如何在 C# 中创建非对称密钥?

罗曼·P

我正在创建一个小软件来使用非对称密钥加密和解密数据。

问题是,我在 C# 中编码,即使我使用:

 BigInteger.Pow(BigIntenger myNumber, int myExponent);

指数是一个“int”,我的值对于一个 int 来说太大了。

只是为了快速解释并确保我没有犯任何错误,您必须使用大数字来使没有私钥的解密变得更加困难。

所以我有

  • N = P * Q
  • P和Q都是素数。
  • 1000 = (P-1) + (Q-1)
  • C是一个质数,M
  • 然后找到U:C×U+M×V=1

公钥(N,C)。

私钥(U,N)。

例如你想加密:“Bonjour !” 到 UTF8。

你将会拥有 :

B⇔66 / o⇔111 / n⇔110 / j⇔106 / o⇔111 / u⇔117 / r⇔114 /(空格)⇔32 /! ⇔33

然后将每个数字提高到 C 和模 N 的幂。

例如:valueOfB = (66^C)%N。

现在您的消息已加密。

如果你想解密它,你必须将每个值乘以指数 U 和模 N。

例如:(valueOfB^U)%N

所以我只有在使用小数字时才能这样做,因为我会有一个适合“int”的小 U 值,但它不安全,我怎么能用像 BigInteger 而不是 int 这样的大 U 来做到这一点?

巴顿杰斯

BigInteger.Pow BigInteger 将是一个非常复杂的数字。

二进制乘法具有以下特性:(粗略地说)将一个n-bit 数乘以一个m-bit 数会产生一个近似(n+m)-bit 的答案。

10 * 4096 = 0b1010 * 0b1_0000_0000_0000  (4 bits, 13 bits)
40960 = 0b1010_0000_0000_0000 (16 bits)

16 * 4096 = 0b1_0000 * 0b1_0000_0000_0000  (5 bits, 13 bits)
65536 = 0b1_0000_0000_0000_0000 (17 bits)

15 * 4095 = 0b1111 * 0b1111_1111_1111 (4 bits, 12 bits)
61425 = 0b1110_1111_1111_0001 (16 bits)

由于求幂是重复乘法,乘法是重复加法,我们可以看到,将 1024 位数字进行 512 位数字的幂将产生 1024*512 位(524288 位,65536 字节)领域的答案.

但随后您将使用模数运算对其进行跟进,使其回到 1024 位数字的领域。真是太浪费了。

值得庆幸的是,存在用于进行有效模幂运算的算法加倍感谢您,.NET 继续为您编写。

你要找的是

valueOfB = BigInteger.ModPow(66, U, N);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

在C#中创建我的对称密钥

来自分类Dev

8192 NodeJS请求中的数据大小有限

来自分类Dev

如何删除numpy数组中的非对称对?

来自分类Dev

如何在Android上创建非对称布局

来自分类Dev

SSH密钥与用于其他目的的非对称密钥有何不同?

来自分类Dev

考虑到有限的RAM空间,如何在C中声明和使用大小为[16] [256]的二维int数组?

来自分类Dev

如何在 SNMP4J 中使用非对称密钥或证书身份验证?

来自分类Dev

如何不依靠已安装的密钥环等在命令行上进行非对称加密?

来自分类Dev

是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

来自分类Dev

如何在Graphviz中创建对称边?

来自分类Dev

如何在Android Keystore中存储对称密钥

来自分类Dev

如何确定OpenPGP加密是对称还是非对称?

来自分类Dev

在Shiny中创建涉及行和列的非对称布局

来自分类Dev

如何在css中显示有限的文本

来自分类Dev

如何在uuid python中获取有限的数字?

来自分类Dev

如何在 Datepicker 布局中显示有限的年数?

来自分类Dev

在C#中非对称地验证JWT

来自分类Dev

C 上信封的 EVP 非对称加密和解密

来自分类Dev

如何使用“ SecItemAdd”在OS X中存储对称密钥?

来自分类Dev

为什么非对称密钥更安全?

来自分类Dev

从 jPBC 保存和加载非对称密钥

来自分类Dev

为什么MBR分区中的硬盘大小有限制?

来自分类Dev

如何在Java PKCS12密钥库中存储对称密钥

来自分类Dev

如何在 C 中为简单的 XOR 密码创建密钥流生成器?

来自分类Dev

如何在C ++中获得(无序)集合差异或对称差异?

来自分类Dev

如何在c / c ++中处理具有大指数的数字?

来自分类Dev

在PHP中如何在没有硬编码密钥的情况下进行对称加密

来自分类Dev

在PHP中如何在没有硬编码密钥的情况下进行对称加密

Related 相关文章

  1. 1

    如何在Java中以非对称加密生成密钥对?

  2. 2

    在C#中创建我的对称密钥

  3. 3

    8192 NodeJS请求中的数据大小有限

  4. 4

    如何删除numpy数组中的非对称对?

  5. 5

    如何在Android上创建非对称布局

  6. 6

    SSH密钥与用于其他目的的非对称密钥有何不同?

  7. 7

    考虑到有限的RAM空间,如何在C中声明和使用大小为[16] [256]的二维int数组?

  8. 8

    如何在 SNMP4J 中使用非对称密钥或证书身份验证?

  9. 9

    如何不依靠已安装的密钥环等在命令行上进行非对称加密?

  10. 10

    是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

  11. 11

    如何在Graphviz中创建对称边?

  12. 12

    如何在Android Keystore中存储对称密钥

  13. 13

    如何确定OpenPGP加密是对称还是非对称?

  14. 14

    在Shiny中创建涉及行和列的非对称布局

  15. 15

    如何在css中显示有限的文本

  16. 16

    如何在uuid python中获取有限的数字?

  17. 17

    如何在 Datepicker 布局中显示有限的年数?

  18. 18

    在C#中非对称地验证JWT

  19. 19

    C 上信封的 EVP 非对称加密和解密

  20. 20

    如何使用“ SecItemAdd”在OS X中存储对称密钥?

  21. 21

    为什么非对称密钥更安全?

  22. 22

    从 jPBC 保存和加载非对称密钥

  23. 23

    为什么MBR分区中的硬盘大小有限制?

  24. 24

    如何在Java PKCS12密钥库中存储对称密钥

  25. 25

    如何在 C 中为简单的 XOR 密码创建密钥流生成器?

  26. 26

    如何在C ++中获得(无序)集合差异或对称差异?

  27. 27

    如何在c / c ++中处理具有大指数的数字?

  28. 28

    在PHP中如何在没有硬编码密钥的情况下进行对称加密

  29. 29

    在PHP中如何在没有硬编码密钥的情况下进行对称加密

热门标签

归档