c# - 在 C# 中,如何存储大素数?
问题描述
今天是个好日子,
我正在尝试在 C# 中实现 Diffie-Hellman 密钥交换协议。首先,这是一个测试项目。我知道我不应该将它用于任何实际应用程序。我这样做只是为了更多地了解它。
现在,根据这个 RFC (3526),我需要使用素数 P=2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
和生成器 G= 2
。
https://datatracker.ietf.org/doc/html/rfc3526#page-6
但是素数太大了!即使对于 BigInteger !
我现在该如何进行?
编辑:
我认为它太大了,因为这段代码返回一个负值:
string hexString = "...";
BigInteger number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier);
Console.WriteLine("Converted 0x{0}\nto\n{1}.", hexString, number);
解决方案
BigInteger.Parse
将十六进制字符串转换为二进制。如果二进制数以 a 开头1
,则表示该数字已签名。这就是为什么它给你一个负数。正如@canton7 所说,只需添加 a0
就可以了。
推荐阅读
- python - 如何在 Python / Flask 中返回 msword 文件数据以在 iframe 中呈现或嵌入预览?
- c# - DateTime 字符串的时间部分和偏移量代表什么时区?
- python-3.x - Python 3 虚拟环境正在执行 python 2
- r - 优化调用以进行变异和汇总?
- vagrant - Vagrant - vagrant 无法转发此 VM 上的指定端口
- image - 如何制作隐写图像
- r - 如何将我的价格 df 转换为基于 100 的回报 df
- scala - Select a literal based on a column value in Spark
- google-apps-script - 使用宏从新工作表中创建和提取信息
- google-cloud-platform - 将反应应用程序部署到 gcp 后尝试调试“502 Bad Gateway”错误?