我想在其中一段代码中使用下面的公式
A = g^a mod p; //g 提升为模数 p。
(类似于 2^5 % 3)= 32%3 = 2
(这个等式看起来像安全的 Diffie Hellman 算法)
在哪里,
^ 是(幂)
g 为固定数字 0x05
a 是128位(16字节)随机生成的数字,
并且 p 是固定的 128 位(16 字节)十六进制数
类似于(0x0xD4A283974897234CE908B3478387A3)。
我在用,
Qt 4.8.7
编译器 MinGW32
(使用 boost 库 boost 1.70 检查)
我发现对我不起作用的解决方案如下:
1 可以使用 __int128,但为了支持它,应该使用最新的 GCC 编译器或 MinGW64 位编译器,而我现在都没有使用这两个编译器。
2 我发现 Qt 的最新版本有一个 QSslDiffieHellmanParameters 类,但在我们的 Qt 版本中仍然不受支持。
3 我发现一些库,如 boost/multiprecision/cpp_int.hpp (boost 1.70)) 确实具有 int128_t 和 int256_t 等数据类型,但由于我们的编译器问题或其他原因,我们无法存储 128 位数字,这意味着如果我这样做,
int128_t ptval128 = 0xAB1232423243434343BAE3453345E34B;
cout << "ptval128 = " << std::hex << ptval128 << endl;
//will print only 0xAB12324232434343;//half digits only,
4 我尝试使用更有用的 Bigint,但 5^(128 位数字)太大了,计算需要几个小时,(我等了 1 小时 16 分钟才终止应用程序)。
int myGval = 0x05;
128_bit_data_type myPVal= 0xD4A283974897234CE908B3478387A3;
128_bit_data_type 128_bit_variable = 128_bit_random_data;
myVal = (myGval)^(128_bit_variable) % (myPVal);