如何在 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 算法)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows下为Qt配置环境变量

如何在 Qt Creator 中使用 MinGW-64

Qt 如何生成可执行程序,用mingw32-make生成的缺少dll文件

在 Qt5.3(mingw32) 中删除 QQuickView 的内存管理问题

在 windows7 上使用 mingw32 编译 Qt 4.8.5:“没有这样的文件或目录”

如何在Windows XP上部署Qt 5.10 Quick 2应用程序?