Как я могу по модулю большое целое значение

    #include <string>
    #include <iostream>

    using namespace std;

    #include "md5.h"

    int main()
    {
        MD5 md5;

        string message = "secretU";
        char arr[message.size()];
        strcpy(arr, message.c_str());

        //encrypting the message "secretU", it will return a string of hexadecimals
        string result = md5.digestString(arr); 

        //print the result of the encrypted message.
        cout << result; 
        return 0;
    }

Результат вывода в шестнадцатеричном формате

1853c517b0e1095a341210f1a4b422e6

После того, как я попытался преобразовать в десятичную, ему нужен размер 125 бит? Однако unsigned long long может содержать только до 64 битов, есть ли способ сохранить это длинное целое число, чтобы я мог модулировать его со значением, которое я хочу?

Преобразовать шестнадцатеричные числа в десятичные

32336430049777443053240099092194140902

2 ответа

Вы можете сделать это вручную или использовать библиотеку, которая предоставляет большие целые числа, такие как https://mattmccutchen.net/bigint/

Возьмите по модулю, разбив их на куски.. скажем, например, вы хотите взять по модулю 37 ^ 11 мод 77, в котором 37 ^ 11 дает ответ 1.77917621779460E17, чтобы получить это.. взять небольшое число вместо 11, что дает целочисленное значение.. разбить его на части... 37 ^ 11 мод 77 можно записать как (37 ^ 4 х 37 ^ 4 х 37 ^ 3 мод 77), поэтому решить его как.. {(37 ^ 4 мод 77) (37 ^ 4 мод 77) (37 ^ 3 мод 77)} мод 77. Итак, в общем случае xy mod n = {(x mod n)(y mod n)} mod n

Другие вопросы по тегам