在我們日常生活中,無論是下載檔案、傳輸資料還是備份重要資訊,如何確保資料的完整性始終是一個不能忽視的問題。本文將向大家介紹如何使用MD5演演算法和sha512sum校驗和來進行檔案完整性的驗證。
MD5演演算法,全稱Message-Digest Algorithm 5,是一種廣泛使用的密碼雜湊函數,可以產生出一個128位元(16位元組)的雜湊值(hash value),通常用一個32位元的16進位制數表示。MD5被廣泛應用於資料的完整性校驗。
MD5演演算法具有以下特性:
儘管在理論上,MD5存在著潛在的安全漏洞,但對於檔案完整性校驗來說,它仍然是足夠安全的。
校驗和(checksum)是通過特定的演演算法,對一組資料進行計算得到的一個簡短的固定大小的位序列。如果輸入資料稍有改動,計算出的校驗和通常會產生顯著的不同。因此,校驗和常被用於檢測資料傳輸或儲存過程中是否發生錯誤。
在檔案完整性校驗中,我們可以通過比較檔案的原始校驗和與當前計算出的校驗和是否一致,來判斷檔案在傳輸或儲存過程中是否未被修改。如果兩個校驗和相同,那麼檔案被認為是完整的;否則,檔案可能已被篡改或損壞。
MD5演演算法和SHA-512演演算法都可以用於生成檔案的校驗和。MD5演演算法生成的校驗和長度為128位元,而SHA-512演演算法生成的校驗和長度為512位元,後者因此提供了更高階別的安全性。
假如存在一個檔案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等。