使用MD5演演算法和sha512sum校驗和檢驗檔案完整性

2023-08-22 06:02:55

一.前言

在我們日常生活中,無論是下載檔案、傳輸資料還是備份重要資訊,如何確保資料的完整性始終是一個不能忽視的問題。本文將向大家介紹如何使用MD5演演算法和sha512sum校驗和來進行檔案完整性的驗證。

二.MD5演演算法簡介

MD5演演算法,全稱Message-Digest Algorithm 5,是一種廣泛使用的密碼雜湊函數,可以產生出一個128位元(16位元組)的雜湊值(hash value),通常用一個32位元的16進位制數表示。MD5被廣泛應用於資料的完整性校驗。

MD5演演算法具有以下特性:

  1. 壓縮性:任意長度的資料,算出的MD5值長度都是固定的。
  2. 容易計算:從原資料計算出MD5值很容易。
  3. 抗修改性:對輸入的資料稍作修改,經過MD5後將產生不同的結果。
  4. 強抗碰撞:已知原資料和其MD5值,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。

儘管在理論上,MD5存在著潛在的安全漏洞,但對於檔案完整性校驗來說,它仍然是足夠安全的。

三.什麼是校驗和

校驗和(checksum)是通過特定的演演算法,對一組資料進行計算得到的一個簡短的固定大小的位序列。如果輸入資料稍有改動,計算出的校驗和通常會產生顯著的不同。因此,校驗和常被用於檢測資料傳輸或儲存過程中是否發生錯誤。

在檔案完整性校驗中,我們可以通過比較檔案的原始校驗和與當前計算出的校驗和是否一致,來判斷檔案在傳輸或儲存過程中是否未被修改。如果兩個校驗和相同,那麼檔案被認為是完整的;否則,檔案可能已被篡改或損壞。

MD5演演算法和SHA-512演演算法都可以用於生成檔案的校驗和。MD5演演算法生成的校驗和長度為128位元,而SHA-512演演算法生成的校驗和長度為512位元,後者因此提供了更高階別的安全性。

四.使用MD5演演算法和sha512sum校驗和檢驗檔案完整性

假如存在一個檔案calico.yaml,我把檔案傳送給某人,怎麼證明檔案在傳輸的途中沒有被惡意修改?

root@k8scludes1:~# ls
calico.yaml

先求出calico.yaml檔案的md5值。

root@k8scludes1:~# md5sum calico.yaml 
9cc4a633f4ba45f0fd723512ec60f330  calico.yaml

把檔案calico.yaml傳輸給etcd2機器。

root@k8scludes1:~# scp calico.yaml 192.168.110.131:/root/test/

etcd2機器收到檔案了。

[root@etcd2 test]# ls
calico.yaml

MD5演演算法可以用來驗證網路檔案傳輸的完整性,Linux的md5sum命令便用於生成和校驗檔案的md5值。需要注意的是,md5sum檢驗的是檔案內容,而不是檔名。

etcd2機器收到檔案之後,我們求檔案的md5值。如果此時生成的md5值和原來的md5值一致,則檔案是完整的,沒有被修改過。

數位簽章也是類似的:檔案和檔案生成的md5值一起傳輸,md5值使用私鑰加密,接收方收到後使用公鑰解密md5值,接收方使用收到的檔案生成md5值,如果md5值和公鑰解密之後的md5值一致,則檔案沒有被修改過。

[root@etcd2 test]# md5sum calico.yaml 
9cc4a633f4ba45f0fd723512ec60f330  calico.yaml

建立校驗和目錄。

root@k8scludes1:~# mkdir checksum

root@k8scludes1:~# cd checksum/

root@k8scludes1:~/checksum# ls
calico.yaml

求檔案的校驗和。

root@k8scludes1:~/checksum# sha512sum calico.yaml 
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf  calico.yaml

把校驗和寫入到檔案裡。

root@k8scludes1:~/checksum# sha512sum calico.yaml >check.txt

root@k8scludes1:~/checksum# vim check.txt 

root@k8scludes1:~/checksum# cat check.txt 
calico.yaml
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf

如果兩個校驗和是一致的,則只剩一行(去重)。

root@k8scludes1:~/checksum# cat check.txt | uniq 
calico.yaml
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf

生成校驗和並寫入檔案。

root@k8scludes1:~/checksum# sha512sum calico.yaml >check.txt 

root@k8scludes1:~/checksum# cat check.txt 
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf  calico.yaml

sha512sum -c 判斷calico.yaml檔案的校驗和和check.txt 裡的校驗和是否一致,輸出OK則校驗和一致。

root@k8scludes1:~/checksum# sha512sum -c check.txt 
calico.yaml: OK

五.總結

MD5和sha512sum校驗和是檢查檔案完整性的有效方法。它們能夠幫助我們在下載、傳輸或備份檔案的過程中確保資料的一致性,提高我們的資料安全性。

儘管MD5和SHA-512廣泛用於計算檔案校驗和,但它們並不能防止資料被篡改。如果你需要保護資料的機密性,建議使用更強大的加密技術,例如AES或RSA等。