我的意思是類似於php sha1_file
。如何在不將內容加載到內存的情況下創建文件的md5或sha1校驗和?
我發現非常漂亮和緊湊的腳本,無需外部庫,例如升壓:http://code.google.com/p/smallsha1/source/browse/trunk/sha1.cpp
但是,有沒有辦法傳遞給它一個文件流時,該文件是例如10GB的大小?
我的意思是類似於php sha1_file
。如何在不將內容加載到內存的情況下創建文件的md5或sha1校驗和?
我發現非常漂亮和緊湊的腳本,無需外部庫,例如升壓:http://code.google.com/p/smallsha1/source/browse/trunk/sha1.cpp
但是,有沒有辦法傳遞給它一個文件流時,該文件是例如10GB的大小?
對於大文件,可以將文件的內存映射部分,計算總和,重新映射到文件的下一部分並繼續求和,依此類推。
確切的代碼不能帶流,不。
看看循環while (currentBlock <= endOfFullBlocks)
。它通過實際的哈希代碼一次運行64個字節。因此,爲了修改此代碼以獲取流,您需要從流中讀取這64個字節,而不是從sarray
(它指向與輸入src
相同的數據)中讀取這些字節。每讀
64個字節是不一種有效的方式來讀取10GB的數據,所以實際上你可能想引入第二環:一個從文件中讀取較大數據塊和一個放的是64字節的塊通過哈希。
你當然還需要修改代碼來處理,這不是的64
或者多輸入數據的「剩餘」部分,找到「初始化」,「更新不同的SHA1實施「,」完成「/」摘要「功能,並使用它。這樣的接口的想法是,你可以隨意調用「更新」次數,傳遞任何大小的數據塊以方便閱讀你的流。
這些是增量散列,因此您可以讀取文件的塊,更新上下文,讀入下一個塊...... –