簡體   English   中英

Java可恢復哈希計算

[英]Java resumable hash computation

我想實現在服務器上上傳的某些文件的可恢復的即時哈希生成。 文件很大,因此我正在使用MessageDigest類的update(byte [])方法(如此處所述,例如: 如何生成MD5哈希? ),因為新字節是從HttpServletRequest的InputStream到達的。

一切進展順利,但是,當我想添加斷點續傳支持時,它變得有趣起來。 如果上載被提前終止,則不完整的文件將存儲在磁盤上。 但是,控制器(和基礎服務)退出,因此MessageDigest對象丟失。 在此之前,我可以通過以下方式將MessageDigest對象序列化到磁盤(或DB,這無關緊要):當我再次反序列化該對象時,它將記住其臨時狀態,因此當我恢復上傳(從確切的位置之前已終止的位置,因此沒有字節冗余,也沒有一些字節丟失),然后繼續對反序列化的MessageDigest進行update()處理,最終我得到的結果(哈希值)就像文件一次全部上傳一樣?

自定義MD5實現類似的搶單這一個這一個 使它可序列化或僅使其內部狀態公開。 上載中止時保留狀態,恢復上載后恢復狀態。

哈希計算起來便宜(MD5加倍;您確定不想要SHA1嗎?)。 我建議您一檢測到上傳已恢復,就從頭開始重新哈希所有內容。 除非上載確實很大,否則運行時間應該很短-希望大型,中斷的上載會很少。

暫無
暫無

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

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