Как я могу по модулю большое целое значение
#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