Я хочу использовать приведенное ниже уравнение в одном из кодов
A = g ^ a mod p;// g повышаем до модуля p.
(что-то вроде 2 ^ 5% 3) = 32% 3 = 2
(это уравнение выглядит как алгоритм Диффи-Хеллмана для безопасности)
Где:
- ^ - это (мощность)
- g - это фиксированное число 0x05
- a - это 128-битное (16-байтовое) случайное число,
- p - фиксированное шестнадцатеричное число 128 бит (16 байтов).Что-то вроде (0x0xD4A283974897234CE908B3478387A3).
Я использую:
- Qt 4.8.7
- Компилятор MinGW32 (проверено с повышением библиотеки надстроек 1.70)
Решения, которые я нашел, которые не работали для меня, перечислены ниже:
можно использовать __int128, но для поддержки этого следует использовать последний компилятор GCCили MinGW64-битный компилятор, ни того, ни другого, который я сейчас использую.
Я обнаружил, что одна последняя версия Qt имеет класс QSslDiffieHellmanParameters, но опять-таки не поддерживается в нашей версии Qt.
Я обнаружил, что некоторые библиотеки, такие как 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,
Я попытался использовать 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);