在Linux命令行做Hash计算

Last Updated: 2023-11-20 14:10:41 Monday

-- TOC --

本文介绍如何在Linux命令行做MD5,SHA-1和SHA-256的校验。

在网上下载大文件,或者对文件来源有怀疑(文件校验值的来源一定要可靠),在使用前做校验是一个常规操作。Linux系统一般都提供了如下几个命令:md5sum, sha1sum, sha256sum,分别对应MD5校验,SHA1校验和SHA256校验。这几个命令的使用是一样的。

这几个命令可以对文件生成校验值,用于文件发布者,也可以用来检查文件的校验,用于文件下载者。在命令行操作的时候,可以同时对多个文件操作。

背景知识:hash算法

先生成3个测试文件:

$ echo '123' > a.txt
$ echo 'abc' > b.txt
$ echo 'cs.pynote.net' > c.txt

md5sum

$ md5sum a.txt b.txt c.txt > md5_all
$ cat md5_all
ba1f2511fc30423bdbb183fe33f3dd0f  a.txt
0bee89b07a248e27c83fc3d5951213c1  b.txt
6965b7222832a1c0a24ffd9ed4b9dd9f  c.txt
$ md5sum -c md5_all
a.txt: OK
b.txt: OK
c.txt: OK

sha1sum

$ sha1sum a.txt b.txt c.txt > sha1_all
$ cat sha1_all
a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0  a.txt
03cfd743661f07975fa2f1220c5194cbaff48451  b.txt
c74d3455e6b5cdf3d3d7634e8f1568f77ea7210c  c.txt
$ sha1sum -c sha1_all
a.txt: OK
b.txt: OK
c.txt: OK

sha256sum

$ sha256sum a.txt b.txt c.txt > sha256_all
$ cat sha256_all
181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b1dd8e5d3b  a.txt
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb  b.txt
97e3ff33c5367f0c44f1a914d6aa40413de471c537e14e0a777637d5a152f859  c.txt
$ sha256sum -c sha256_all
a.txt: OK
b.txt: OK
c.txt: OK

这几个命令,只校验文件内容,与文件属性无关!修改文件属性,不会影响数据校验。

checksum文件格式

上面的几个例子,md5_all, sha1_all, sha256_all,这3个文件就是checksum文件,连同这个文件发布,或者连同这个文件下载!

checksum文件的格式很简单,上面的例子都是用命令直接对多个文件生成了checksum文件。不过,我在网上还发现了其它格式的checksum文件,如下:

# ubuntu-20.04.3-desktop-amd64.iso: 3071934464 bytes
SHA256 (ubuntu-20.04.3-desktop-amd64.iso) = 5fdebc435ded46ae99136ca875afc6f05bde217be7dd018e1841924f71db46b5

# CentOS-8.4.2105-x86_64-dvd1.iso: 9928966144 bytes
SHA256 (CentOS-8.4.2105-x86_64-dvd1.iso) = 0394ecfa994db75efc1413207d2e5ac67af4f6685b3b896e2837c682221fd6b2

可以有空行,可以有注释,还可以使用等号!anyway,都很简单...

计算任意字符串的checksum

$ echo '123' | md5sum
ba1f2511fc30423bdbb183fe33f3dd0f  -
$ echo '123' | sha256sum
181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b1dd8e5d3b  -
$ sha256sum <<< '123'
181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b1dd8e5d3b  -

sha512sum

已经有sha512了...

本文链接:https://cs.pynote.net/se/jjm/202110236/

-- EOF --

-- MORE --