0
    #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
4

2 回答 2

2

通过将它们分成几块来取模..例如,你想取37^11 mod 77的模,其中 37^11 给出答案1.77917621779460E17所以要得到这个..用一些小数代替 11 给出一个整数值.. 把它分成几块... 37^11 mod 77可以写成(37^4 x 37^4 x 37^3 mod 77)所以解决它.. {(37^4 mod 77)( 37^4 模 77)(37^3 模 77)} 模 77。所以,通常xy mod n = {(x mod n)(y mod n)} mod n

于 2017-11-04T18:34:51.630 回答
2

您可以手动完成,也可以使用提供大整数的库,例如https://mattmccutchen.net/bigint/

于 2017-11-04T18:22:36.370 回答