Linux md5sum 命令


  經常在網絡或設備之間傳輸文件會遇到一個問題,就是如何確定文件沒有在傳輸過程中損壞。尤其是在網絡上這種相對不穩定的環境中更容易出現錯誤。其實一些網站的文件是有提供MD5值的,我們只需要為下載的文件使用md5sum命令計算校驗碼然后和網站提供的校驗碼對比就行,如果md5值一樣理論上可以確定這兩個文件內容是一樣的。同樣,不同設備或同一設備上的兩個文件,我們也可以對比其md5值來確定它們的內容是否一致。

除了md5sum 還有其他的一些哈希算法也可以對文件進行校驗如sha1sum命令使用sha1,用法和md5sum類似。

MD5

  MD5即Message-Digest Algorithm 5(信息-摘要算法5),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16個字符(BYTES))的散列值(hash value),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理。

MD5被廣泛用於加密和解密技術上,它可以說是文件的“數字指紋”。任何一個文件,無論是可執行程序、圖像文件、臨時文件或者其他任何類型的文件,也不管它體積多大,都有且只有一個獨一無二的MD5信息值,並且如果這個文件被修改過,它的MD5值也將隨之改變。因此,我們可以通過對比同一文件的MD5值,來校驗這個文件是否被“篡改”過。

  MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4算法。這套算法的程序在 RFC 1321 中被加以規范。

  將數據(如一段文字)運算變為另一固定長度值,是散列算法的基礎原理。

  1996年后被證實存在弱點,可以被加以破解,對於需要高度安全性的資料,專家一般建議改用其他算法,如SHA-2。2004年,證實MD5算法無法防止碰撞攻擊,因此不適用於安全性認證,如SSL公開密鑰認證或是數字簽名等用途。

MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。

2、容易計算:從原數據計算出MD5值很容易。

3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。

4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

從md5的資料可以知道,兩個文件的數據就算有一丁點差異,生成的md5碼都有很大差別,因此只能用md5碼來找完全相同的文件,而不能找相似的文件。對文件進行md5驗證的目的除了文件完整性外,也避免由於文件名的更改導致不一樣的結果

md5sum 手冊

                                      MD5SUM(1)

NAME
   md5sum - 計算檢驗MD5效驗碼

總覽 (SYNOPSIS)
   ../src/md5sum [OPTION] [FILE]...
   ../src/md5sum [OPTION] --check [FILE]

描述 (DESCRIPTION)
    顯示 或 檢驗 MD5 效驗碼. 如果 沒有 FILE 或者 FILE 是 - 時, 就從 標准 輸入 讀入.

	-b, --binary
	以二進制模式讀取
	-c, --check
	檢驗文件的 MD5 值。給定的文件中每一行的內容是 md5sum 的輸出結果,即 md5-value  filename(文本輸入模式)或 md5-value *filename(二進制輸入模式)
	--tag
	創建 BSD 風格的 md5 輸出行
	-t, --text
	以文本模式讀取(默認)。注意,在 GNU 系統中,-b 與 -t 選項在讀取時沒有差別。在輸出時,文本輸入模式在文件名前是兩個空格,二進制輸入模式在文件名前是一個空格和星號

 以下選項只在校驗 md5 值時有效
	--quiet
	校驗成功的文件不打印 OK
	--status
	不輸出任何校驗成功與失敗的信息,使用命令返回碼來表示是否校驗成功,0 成功,非 0 失敗
	--strict
	遇到非法格式的校驗行,命令返回非 0 狀態碼
	-w, --warn
	遇到非法格式的校驗行發出告警

常用示例

1)生成文件的 md5 值,以文件 /etc/passwd 為例

[root@ito-yw-host ~]# cp /etc/passwd /etc/passwd.bak
[root@ito-yw-host ~]# md5sum /etc/passwd
fc6a975eb7ac26ddec24e72c95c3c935  /etc/passwd
[root@ito-yw-host ~]# md5sum /etc/passwd.bak 
fc6a975eb7ac26ddec24e72c95c3c935  /etc/passwd.bak
[root@ito-yw-host ~]# echo "123" >> /etc/passwd.bak   
[root@ito-yw-host ~]# md5sum /etc/passwd.bak       
77b8a0e3a67f7aa91320b3436f55bc45  /etc/passwd.bak

上面示例中passwd.bak和passwdMD5值一樣,說明MD5只與文件內容有關和文件名稱無關,只要文件內容不一樣,得出來的MD5值完全不一樣。就是文件    內容差一個字符不一樣,得出的MD5值也完全不一樣。

  2)生成文件的 md5 值到輸出文件 passwd.md5

[root@ito-yw-host ~]# md5sum /etc/passwd.bak
77b8a0e3a67f7aa91320b3436f55bc45 /etc/passwd.bak
[root@ito-yw-host ~]# md5sum /etc/passwd.bak > passwd.bak.md5

3)校驗文件的 md5 值。使用上面第二步生成的校驗行文件。

-c, --check:從指定文本中讀取md5值,然后檢測MD5值對應的文件是否完整,這個“指定文本”的格式如下:

[root@ito-yw-host ~]# cat passwd.bak.md5
77b8a0e3a67f7aa91320b3436f55bc45  /etc/passwd.bak

當passwd.bak.md5記錄的md5值和實際一致是輸出“ok"或”確定“,不一致時輸出”FAILED“或”失敗“

[root@ito-yw-host ~]# md5sum -c passwd.bak.md5
/etc/passwd.bak: 確定
[root@ito-yw-host ~]# echo "1" >> /etc/passwd.bak 
[root@ito-yw-host ~]# md5sum -c passwd.bak.md5    
/etc/passwd.bak: 失敗
md5sum: 警告:1 個校驗和不匹配

4)–tag:按照BSD樣式輸出結果

[root@ito-yw-host ~]# md5sum --tag /etc/passwd
MD5 (/etc/passwd) = fc6a975eb7ac26ddec24e72c95c3c935

5)–quiet:檢查MD5值只輸出錯誤信息

[root@ito-yw-host ~]# md5sum --quiet -c passwd.bak.md5
/etc/passwd.bak: 失敗
md5sum: 警告:1 個校驗和不匹配
[root@ito-yw-host ~]# md5sum --quiet -c passwd.md5    ## md5校驗ok,沒有輸出

6)–status:不打印任何信息,執行結果以狀態碼形式輸出

狀態碼為0標識校驗成功,非 0 失敗

[root@Centos7.9 ~]# md5sum --status -c passwd.md5        
[root@ito-yw-host ~]# echo $?
0
[root@ito-yw-host ~]# md5sum --status -c passwd.bak.md5       
[root@ito-yw-host ~]# echo $?
1

7)-w, --warn :如果檢測文本中有,非法的行,不符合md5sum -c需要的格式,則打印出警告信息

不過測試加不加--warn格式不正確時都會有警告信息

[root@ito-yw-host ~]# md5sum --warn -c passwd.md5 
/etc/passwd: 確定
[root@ito-yw-host ~]# cat passwd.md5 
fc6a975eb7ac26ddec24e72c95c3c935  /etc/passwd
[root@ito-yw-host ~]# echo "ccccc" >> passwd.md5          
[root@ito-yw-host ~]# cat passwd.md5             
fc6a975eb7ac26ddec24e72c95c3c935  /etc/passwd
ccccc
[root@ito-yw-host ~]# md5sum --warn -c passwd.md5             
/etc/passwd: 確定
md5sum: passwd.md5:2:MD5 的校驗和行目格式不適當
md5sum: 警告:1 行的格式不適當
[root@ito-yw-host ~]# md5sum -c passwd.md5        
/etc/passwd: 確定
md5sum: 警告:1 行的格式不適當

Tips

1)md5sum 是校驗文件內容,與文件名是否相同無關

2)md5sum值逐位校驗,所以文件越大,校驗時間越長

3)理論上不同文件md5值可能會相同,但這種概率極低

總結
通過md5sum來校驗生成文件校驗碼,來發現文件傳輸(網絡傳輸、復制、本地不同設備間的傳輸)異常造成的文件內容不一致的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM