在 C# 中,如何存储大质数?
In C#, how do I store large prime number?
大家好,
我正在尝试用 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 !
我现在该如何进行?
编辑:
我认为它太大了,因为这段代码 return 是一个负值 :
string hexString = "...";
BigInteger number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier);
Console.WriteLine("Converted 0x{0}\nto\n{1}.", hexString, number);
BigInteger.Parse
将十六进制字符串转换为二进制。如果二进制数以 1
开头,则表示该数字是有符号的。这就是为什么它给你一个负数。正如@canton7 所说,只需在前面加上一个 0
就可以了。
大家好,
我正在尝试用 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 !
我现在该如何进行?
编辑:
我认为它太大了,因为这段代码 return 是一个负值 :
string hexString = "...";
BigInteger number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier);
Console.WriteLine("Converted 0x{0}\nto\n{1}.", hexString, number);
BigInteger.Parse
将十六进制字符串转换为二进制。如果二进制数以 1
开头,则表示该数字是有符号的。这就是为什么它给你一个负数。正如@canton7 所说,只需在前面加上一个 0
就可以了。