如何在 Qt 上的 MinGW32 位编译器中处理 128 位变量?

如何在 Qt 上的 MinGW32 位编译器中处理 128 位变量?

我想在其中一段代码中使用下面的公式

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

相关内容