我正在對可執行文件執行MD5散列。我使用python腳本從可執行文件讀取二進制文件到一個文本文件中,但是如果我將這個構造文件讀入C程序,我將處理MB的數據,因爲這些數據和零被視爲每個1位數字取8位。是否有可能將它們分別單獨讀入?如果我製作了一個10MB的數組來保存所需要的二進制轉換和填充的所有字符,程序的性能會有多糟糕?如果這是不可想象的,是否有更好的方式來操縱數據?如何訪問數百萬位的散列
回答
由於您所標記的問題C和C++,我會去C.
是否有可能在各單位閱讀這些?
是的,剛讀8個字節從文件時間和串聯這些1
S和0
s到做一個新的字節。你不需要爲此製作一個10MB的陣列。
首先,從文件中讀取8個字節。讀取的char
值將被轉換爲整數值(0
和1
),然後進行移位以創建新的字節。
unsigned char bits[8];
while (fread(bits, 1, 8, file) == 8) {
for (unsigned int i = 0; i < 8; i++) {
bits[i] -= '0';
}
char byte = (bits[0] << 7) | (bits[1] << 6) |
(bits[2] << 5) | (bits[3] << 4) |
(bits[4] << 3) | (bits[5] << 2) |
(bits[6] << 1) | (bits[7] );
/* update MD5 Hash here */
}
然後,您將用新讀取的字節更新您的MD5哈希值。
編輯:由於典型的MD5的實現將不得不把輸入到處理前512位數據塊,你可以擺脫在執行本身(不推薦雖然)是開銷,和剛讀512位(64字節),然後直接更新散列。
unsigned char buffer[64];
unsigned char bits[8];
unsigned int index = 0;
while (fread(bits, 1, 8, file) == 8) {
for (unsigned int i = 0; i < 8; i++) {
bits[i] -= '0';
}
buffer[index++] = (bits[0] << 7) | (bits[1] << 6) |
(bits[2] << 5) | (bits[3] << 4) |
(bits[4] << 3) | (bits[5] << 2) |
(bits[6] << 1) | (bits[7] );
if (index == 64) {
index = 0;
/* update MD5 hash with 64 byte buffer */
}
}
/* This sends the remaining data to the MD5 hash function */
/* It's not likely that your file has exactly 512N chars */
if (index != 0) {
while (index != 64) {
buffer[index++] = 0;
}
/* update MD5 hash with the padded buffer. */
}
就我個人而言,我會拍攝(8 * N)個字符,其中N是底層哈希算法的塊大小。例如,SHA-1具有512位塊大小,SHA-2(224,256)同樣是512位,SHA-2(384/512)是1024位等等。 – WhozCraig
這是一個不錯的主意。在這種情況下,他必須在更新哈希之前讀取64個字節。這樣,他不需要將輸入處理爲512位塊的開銷。 –
他不會*擁有*,但任何自我尊重的散列算法實現只是坐在數據上,直到塊大小滿或終結器被觸發。例如,對於SHA-1,讀取8 * 512個字符,將它們拼成字節,然後提交該塊可能至少有助於減少hash-api調用的數量。當然,如果內存是合理的,你可以通過一個過濾器來填充std :: vector
- 1. 如何訪問數組中的散列?
- 2. 如何訪問散列值?
- 3. 如何使用ByteArray訪問一百萬片樹葉的圖樹?
- 4. 如何使用數字數百萬位數進行計算?
- 5. 只有幾百萬項的安全散列
- 6. 訪問PARAMS散列wihtout復位
- 7. 如何通過散列的Perl散列中的值訪問鍵?
- 8. C:在散列表中存儲多達一百萬個條目
- 9. 密碼,鹽,散列,DB:第一百萬次
- 10. 散列和訪問
- 11. 如何訪問SimpleMembershipProvider散列算法
- 12. 如何訪問多維散列會話?
- 13. 如何訪問這種散列
- 14. 如何在控制器訪問散列
- 15. 數百萬行的GUI
- 16. 如果散列值在數組中,如何訪問散列值? PERL
- 17. 填充和散列的訪問數組
- 18. 打印數字從一百萬到一百萬
- 19. 將pi計算爲第一百萬位。
- 20. jquery.animateNumber出數以百萬計
- 21. 如何訪問包含類似散列對象的數組
- 22. 如何訪問此散列中的參數?
- 23. 如何訪問perl中的散列數組?
- 24. 如何訪問存儲在散列中的數組元素?
- 25. Perl:如何訪問散列中的數組
- 26. 以百萬爲單位表示任何給定數字
- 27. 如何裝載2百萬行的JTable
- 28. 訪問散列密碼
- 29. 無法訪問散列圖
- 30. 將y軸上的單位從百萬(M)更改爲HighCharts中的數百萬(MM)
首先,不要使用MD5 - 在這個時代使用它沒有合理的藉口。 –
這是我正在做的研究的第一步。最重要的是熟悉哈希。之後我們將轉換爲更好的哈希算法。 – Dolphiniac
沒有任何意義 - 基本上你所做的一切(或者你所提到的所有內容)都是哈希算法。所以基本上,你說的是做一些事情,然後把它徹底扔掉,從第一天開始。如果你從一個1和0的字符串開始,就像你所描述的那樣,這會更加真實。 –