使用MD5算法和sha512sum校验和检验文件完整性
阅读原文时间:2023年08月21日阅读:4

目录

一.前言

在我们日常生活中,无论是下载文件、传输数据还是备份重要信息,如何确保数据的完整性始终是一个不能忽视的问题。本文将向大家介绍如何使用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等。