首页
/
每日頭條
/
生活
/
文件md5是什麼
文件md5是什麼
更新时间:2024-09-29 09:29:16

文件md5是什麼?最近想做一個文件管理庫,發現文件多到一定程度後隻用文件名來管理有些困難,想嘗試下用其它方法來管理文件,這時想起來各類網盤工具中的“秒傳”功能,在傳文件時,幾個G的文件一下就傳上去了,但其實就沒傳,原理據說就是計算文件的md5值,然後檢查系統裡已經有這個文件了,就不用在上傳了,給用戶顯示“你的文件已經秒傳成功”,下面我們就來聊聊關于文件md5是什麼?接下來我們就一起去了解一下吧!

文件md5是什麼(文件md5加密算法)1

文件md5是什麼

最近想做一個文件管理庫,發現文件多到一定程度後隻用文件名來管理有些困難,想嘗試下用其它方法來管理文件,這時想起來各類網盤工具中的“秒傳”功能,在傳文件時,幾個G的文件一下就傳上去了,但其實就沒傳,原理據說就是計算文件的md5值,然後檢查系統裡已經有這個文件了,就不用在上傳了,給用戶顯示“你的文件已經秒傳成功”。

另外日常使用的git在提交文件時也有類似的操作,但用的不是md5而是sha1,打開“.git/objects/ ”目錄裡面就是sha1算法生成的文件。

sha1和md5的作用是相同的,但sha1碰撞難度更高,有更好的安全性,但在一般情況下,md5就已經夠用了。

動手開始寫代碼,代碼運行起來後,遇到了第一個困難,”磁盤占用率太高”,記得以前用機械硬盤時,windows動不動就磁盤占用率100%,用了各種辦法都沒法解決,以為這是微軟在提示用戶,你的硬盤應該升級了,最後隻好升級固态硬盤解決了這個問題,沒想到今天又遇到了這個問題。

我用的是php的md5_file()函數計算文件的md5值,當計算2G以上mp4文件的md5值時cpu 内存都正常,磁盤占用卻率升到70%以上。于是我更換了編程語言,看是否還有這個問題。

首頁找到了一個python計算文件md5值的封裝,但測試下來也是一樣的問題,磁盤占用率太高,于是又用上了js,在github找到了spark-md5.js這個庫,在浏覽器前端計算文件的md5值,發現雖然沒有磁盤占用率太高的問題,但浏覽器的内存占用又太高了。

于是就想能不能不判斷下文件大小,對太大的文件不計算md5了,結合文件大小,最後修改時間,創建時間等因素來做文件的唯一标識(找出文件有多少個副本),這個方法并不好,因為文件的元信息是可以随意改動的,要造出兩個元信息完全一緻的文件并不困難。

經人指點後,感覺還是要用md5才行,但對于太大的文件,可以并不計算整個文件的md5,而是抽取文件部分内容計算hash。因為并不需要文件的全部内容。

對于太大的文件使用:文件大小+内容

抽樣(頭、中、尾或每隔xx字節抽樣一次哈希),寫了一段php代碼來驗證這一思路,發現可行。測試下來沒有磁盤占用率太高的情況,也不吃内存,沒有性能問題,

function file_md5_16k($path){  $size=filesize($path);//取得文件大小  if($size>16384){//如果文件大于16kb    $str=$size;    $str.=file_get_contents($path,null,null,0,4096);#文件頭部4kb    $str.=file_get_contents($path,null,null,(($size/2)-2048),4096);#文件中部4kb    $str.=file_get_contents($path,null,null,($size-4096),4096);#文件尾部4kb    return md5($str);  }else{ //文件不太,不抽樣,直接計算整個文件的hash    return md5_file($path);  }}

這裡隻是測試16kb以上的文件就用了抽樣計算,實際應用中16k的文件太小了,大于16kb的文件太多,中間修改了一些内容很會産生重複。應該設置的更大一些。

md5存在重複可能,在md5基礎上再結合文件類型,文件元信息等就可以對文件做唯一标識,避免文件重複,從而建立文件指紋庫。

當然要實現文件“秒傳”要做的遠遠不止這些,這個隻是實現原理算法。

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
京邦達和京東什麼關系
京邦達和京東什麼關系
京邦達和京東什麼關系?京東和京邦達是一個公司,京邦達有限公司是京東集團的下屬公司,接下來我們就來聊聊關于京邦達和京東什麼關系?以下内容大家不妨參考一二希望能幫到您!京邦達和京東什麼關系京東和京邦達是一個公司,京邦達有限公司是京東集團的下屬公...
2024-09-29
07年張傑和陳楚生
07年張傑和陳楚生
2008年,湖南衛視跨年晚會發生重大翻車,四個主持人手忙腳亂,為了穩住場子,主持人帶頭唱起了《常回家看看》,更尴尬的是,四個人沒一個唱對歌詞的,現場混亂一片最後和觀衆互動救場10分鐘,才勉強緩解尴尬,盡管全力補救但這次翻車還是給湖南衛視帶,...
2024-09-29
寓意興旺的三字詞公司名字
寓意興旺的三字詞公司名字
寓意興旺的三字詞公司名字?皇聖盈一個公司最大的希望就是期盼自己的産品被顧客認可和接受,從而為自己帶來更多的盈利,公司取名帶上盈字,寓意公司可以财源滾滾皇聖二字都是與古代皇帝相關的字,一起用給人一種尊貴和霸氣的感覺,很有大規模公司的繁盛和昌榮...
2024-09-29
迪麗熱巴新戲殺青造型遭吐槽
迪麗熱巴新戲殺青造型遭吐槽
迪麗熱巴現在的人氣和熱度算得上90後流量小花中的佼佼者了,演技在最近的《烈火如歌》中的表現還不錯,隻不過她的作品和資源還是不如同期的周冬雨和李沁。婁藝潇在自己參加的綜藝裡爆料,迪麗熱巴這幾年以來從沒休息,一直都在拍攝作品和錄制節目,婁藝潇表...
2024-09-29
鹿柴這首詩的意思是什麼
鹿柴這首詩的意思是什麼
鹿柴這首詩的意思是什麼?鹿柴這首詩的意思是:空寂的山中不見一個人,隻聽到一陣人語聲太陽的一抹餘晖返人深林,又照到林中的青苔上,我來為大家講解一下關于鹿柴這首詩的意思是什麼?跟着小編一起來看一看吧!鹿柴這首詩的意思是什麼鹿柴這首詩的意思是:空...
2024-09-29
Copyright 2023-2024 - www.tftnews.com All Rights Reserved