簡體   English   中英

C ++將十六進制md5哈希轉換為十進制整數

[英]C++ converting hexadecimal md5 hash to decimal integer

我正在做Elgamal簽名方案,我需要使用消息中的十進制哈希值來計算S以進行簽名生成。 十六進制哈希的一個示例是:

820dbb4256a4287557ade2f729d279f1

如上所示,哈希值是32位十六進制數。 我需要將上面的字符串轉換為十進制整數,然后將其用於計算。

    string hash = md5(message);
    cout << hash << endl;
    NTL::ZZ msgHash = strtol(hash.c_str(), NULL, 16);
    cout << msgHash << endl;

沒有足夠大的整數來包含32字節十六進制哈希的值,所以我嘗試了來自NTL庫的大整數,但它沒有解決,因為你不能分配從strtol函數返回的長整數(我認為十進制哈希值比NTL :: ZZ類型的長整數范圍限制長。 這有什么好的解決方案嗎?

我在Visual Studio 2013中使用visual C ++這樣做。

MD5的結果是八位字符串(或字節數組)。 十六進制值應該只用於表示二進制值。 您需要將十六進制字符串轉換回字節。 這是由庫中的十六進制解碼器執行的。

然后需要將字節數組轉換回多精度整數。 為此你需要一個圖書館 在crypto(通常基於群論)中,將字節解釋為無符號大端(MSB優先)編碼整數可能是有意義的。

如果需要執行任何其他與加密相關的計算,那么最好使用加密庫,如OpenSSL(C),Crypto ++或Bothan(C ++)。 這些庫已經包含處理大(無符號)數字的方法,並且通常還包含十六進制編解碼器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM