md5sum
md5sum
是一种计算机程序,用于计算与校验RFC 1321所描述的128位MD5哈希值,此处MD5散列值(或校验和)作一个文件的数字指纹使用。
功能
理论上看,正如其他散列算法一样,一个MD5哈希值可对应无限个文件,但从现实的角度看,两个不同的文件几乎不可能有相同的MD5哈希值,除非其创建便是刻意为之。一般来说,任何对一个文件的非恶意变更都会导致其MD5哈希值改变,因此md5sum
一般用于检查文件完整性,尤其常用于检测在文件传输、磁盘错误或其他无恶意涉入的情况下文件的正确性。
隐患
MD5算法安全性已遭质疑(参见MD5算法缺陷);SHA-1算法也于2017年正式被Google攻破[1]。所以当文件可能遭恶意改动的时候,就不应使用md5sum
,而应以sha256sum
等求哈希值的工具代之。
分布
在多数Unix、Linux与其他类Unix操作系统或兼容层都默认安装了md5sum
工具,而其他操作系统(包括Microsoft Windows与BSD的变体Mac OS X)也有相似的工具。在FreeBSD上,有同样功用的工具名为md5
,但其亦带有额外的特性。
示例
以linux下shell为环境示例,以下文件皆于同一目录下。
计算校验值并输出至hash.md5
$ md5sum filetohashA.txt filetohashB.txt filetohashC.txt > hash.md5
所得文件
文件内包括了哈希值和对应的文件名。
$ cat hash.md5
595f44fec1e92a71d3e9e77456ba80d1 filetohashA.txt
71f920fa275127a7b60fa4d4d41432a3 filetohashB.txt
43c191bf6d6c3f263a8cd0efd4a058ab filetohashC.txt
以MD5值校验文件
$ md5sum -c hash.md5
filetohashA.txt: OK
filetohashB.txt: OK
filetohashC.txt: OK
注:在校验文件内,各个md5校验值与需比较的文件名间必须有两个空格,文件内换行也应为UNIX换行符(LF),否则无法进行。
检查单个MD5值
$ echo "595f44fec1e92a71d3e9e77456ba80d1 filetohashA.txt" | md5sum -c
filetohashA.txt: OK