文件完整性校验

本文介绍如何使用MD5算法和sha512sum校验和来进行文件完整性的验证。

文件完整性校验是确保文件在传输、存储或处理过程中未被篡改或损坏的重要技术手段。它在信息安全、数据管理和系统维护中扮演着关键角色。

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等。

本博客已稳定运行 小时 分钟
共发表 38 篇文章 · 总计 111.39 k 字
本站总访问量
Built with Hugo
主题 StackJimmy 设计