如何在 Qt 中处理用于加密的 MinGW 32 位编译器中的 128 位变量(Diffie Hellman 算法)
Posted
技术标签:
【中文标题】如何在 Qt 中处理用于加密的 MinGW 32 位编译器中的 128 位变量(Diffie Hellman 算法)【英文标题】:How to deal with 128bit variable in MinGM32 bit compiler for Encryption (Diffie Hellman Algorithm) in Qt 【发布时间】:2019-05-10 06:51:12 【问题描述】:我想在其中一个代码中使用下面的等式
A = g^a mod p; //g 提高到模数 p。
(类似于 2^5 % 3)= 32%3 = 2
(这个方程看起来像 Diffie Hellman 安全算法)
地点:
^ 是(幂) g 是固定数字 0x05 a是128bit(16bytes)随机生成的数, p 是 128 位(16 字节)的固定十六进制数。类似于 (0x0xD4A283974897234CE908B3478387A3)。我正在使用:
Qt 4.8.7 编译器 MinGW32(使用 boost 库 boost 1.70 检查)我发现对我不起作用的解决方案如下:
可以使用 __int128,但要支持应该使用 最新的 GCC 编译器或 MinGW64 位编译器,我现在都没有使用。
我发现一个最新版本的 Qt 有 QSslDiffieHellmanParameters 类, 但在我们的 Qt 版本中同样不支持。
我发现了一些库,例如 boost/multiprecision/cpp_int.hpp (boost 1.70)) 确实具有 int128_t 和 int256_t 等数据类型,但由于 我们的编译器问题或其他问题,我们无法存储 128bit数,含义 如果我这样做:
int128_t ptval128 = 0xAB1232423243434343BAE3453345E34B;
cout << "ptval128 = " << std::hex << ptval128 << endl;
//will print only 0xAB12324232434343;//half digits only,
-
我尝试使用更有用的 Bigint,但又一次
5^(128bit number) 太大了,计算需要几个小时,
(我等了 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);
【问题讨论】:
这是一个XY problem?。您应该问如何计算幂的模数。 Raising large number to large power and mod it by a large number?、Calculate (a^b)%c where 0<=a,b,c<=10^18、Calculating (a^b)%MOD、a to power b modulus k的可能重复...此外,与mingw64相比,mingw非常糟糕 【参考方案1】:这不是如何进行模幂运算!第一个问题是5 ^ 128_bit_variable
是巨大的,太大了以至于它不适合今天可用的任何计算机的内存。为了将所需的存储空间保持在界限内,您必须在每次操作后取出剩余的% myPVal
。
第二个问题是你不能简单地通过将5
乘以128_bit_variable
倍来计算5 ^ 128_bit_variable
——这将花费比宇宙年龄更长的时间。您需要使用幂梯,它只需要128
平方和最多128
乘法。有关详细信息,请参阅this Wikipedia article。最后,5 ^ 128_bit_number
操作应该只需要几分之一秒。
【讨论】:
这个数字远远超过了宇宙中粒子的总数(~10⁸⁰) @TonyK 非常感谢您的评论。我检查了您的 Wikipedia 链接,并关注了 geeksforgeeks.org/… 链接,它似乎运行良好,我将数据类型从 long int 更改为 Bigint。 大家好,我找到了使用 Crypto++ 库解决这个方程的其他解决方案,查看链接 cryptopp.com/docs/ref/…以上是关于如何在 Qt 中处理用于加密的 MinGW 32 位编译器中的 128 位变量(Diffie Hellman 算法)的主要内容,如果未能解决你的问题,请参考以下文章
Qt 如何生成可执行程序,用mingw32-make生成的缺少dll文件
在 Qt5.3(mingw32) 中删除 QQuickView 的内存管理问题