文件完整性校验是确保文件在传输、存储或处理过程中未被篡改或损坏的重要技术手段。它在信息安全、数据管理和系统维护中扮演着关键角色。
MD5算法简介
MD5 算法(Message Digest Algorithm 5,消息摘要算法第5版)是一种广泛使用的哈希函数,由 Ronald Rivest 于 1991 年设计。它可以将任意长度的数据(如文件、字符串)转换为固定长度的 128 位(16 字节)哈希值,通常以 32 个十六进制字符表示。MD5 最初被设计用于数据完整性校验和密码存储,但由于其安全性问题,现已不推荐用于高安全性场景。
MD5 算法的特点:
- 输出长度:128 位(16 字节),通常表示为 32 个十六进制字符。
- 输入长度:支持任意长度的输入数据。
- 计算速度:MD5 计算速度较快,适合处理大量数据。
- 确定性:相同的输入始终生成相同的哈希值。
- 雪崩效应:输入数据的微小变化会导致哈希值的显著变化。
尽管在理论上,MD5存在着潜在的安全漏洞,但对于文件完整性校验来说,它仍然是足够安全的。
校验和
校验和(Checksum)是一种用于验证数据完整性的简单技术。它通过对数据(如文件、消息或数据包)进行数学计算,生成一个固定长度的值(即校验和),然后将该值与接收方计算的校验和进行比对。如果两者一致,则说明数据在传输或存储过程中未被篡改或损坏;如果不一致,则说明数据可能存在问题。
MD5算法和SHA-512算法都可以用于生成文件的校验和。MD5算法生成的校验和长度为128位,而SHA-512算法生成的校验和长度为512位,后者因此提供了更高级别的安全性。
使用MD5算法和sha512sum校验和检验文件完整性
假如存在一个文件 file.txt,我把文件发送给其他人,怎么证明文件在传输的途中没有被恶意修改?
1
2
|
root@ubuntu:~# ls
file.txt
|
先求出文件的md5值。
1
2
|
root@ubuntu:~# md5sum file.txt
9cc4a633f4ba45f0fd723512ec60f330 file.txt
|
把文件传输给其他机器。
1
|
root@ubuntu:~# scp file.txt 192.168.110.131:/root/test/
|
其他机器收到文件之后,求文件的md5值。如果此时生成的md5值和原来的md5值一致,则文件是完整的,没有被修改过。
数字签名也是类似的:文件和文件生成的md5值一起传输,md5值使用私钥加密,接收方收到后使用公钥解密md5值,接收方使用收到的文件生成md5值,如果md5值和公钥解密之后的md5值一致,则文件没有被修改过。
1
2
|
[root@etcd2 test]# md5sum file.txt
9cc4a633f4ba45f0fd723512ec60f330 file.txt
|
创建校验和目录。
1
2
3
4
|
root@ubuntu:~# mkdir checksum
root@ubuntu:~# cd checksum/
root@ubuntu:~/checksum# ls
file.txt
|
求文件的校验和。
1
2
|
root@ubuntu:~/checksum# sha512sum file.txt
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf file.txt
|
把校验和写入到文件里。
1
2
3
4
5
6
7
8
|
root@ubuntu:~/checksum# sha512sum file.txt >check.txt
root@ubuntu:~/checksum# vim check.txt
root@ubuntu:~/checksum# cat check.txt
file.txt
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf
|
如果两个校验和是一致的,则只剩一行(去重)。
1
2
3
|
root@ubuntu:~/checksum# cat check.txt | uniq
file.txt
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf
|
生成校验和并写入文件。
1
2
3
4
|
root@ubuntu:~/checksum# sha512sum file.txt >check.txt
root@ubuntu:~/checksum# cat check.txt
94eece98db92232a42080e33f87e0659182e2ff9e347db38a494928c247289fcfa763a20e18ee63a84fe87f436b91e710927d138621640d6753083b8b339e8cf file.txt
|
sha512sum -c 判断file.txt文件的校验和和check.txt 里的校验和是否一致,输出OK则校验和一致。
1
2
|
root@ubuntu:~/checksum# sha512sum -c check.txt
file.txt: OK
|
总结
MD5和sha512sum校验和是检查文件完整性的有效方法。它们能够帮助我们在下载、传输或备份文件的过程中确保数据的一致性,提高我们的数据安全性。
尽管MD5和SHA-512广泛用于计算文件校验和,但它们并不能防止数据被篡改。如果你需要保护数据的机密性,建议使用更强大的加密技术,例如AES或RSA等。