在网站下载文件时,经常会看到后面跟着一个校验码,它的作用是用来校验下载下来的文件是否发生改变,方式是在本地对文件用相同的算法计算效验码,如果和提供的一致,则说明文件完整且正确。
校验码的算法有多种,常用的有md5、sha1、sha256等,MacOS上自带了几个命令可以计算出这些值。新建个文本文件a.txt,将字符串abc写入,用这个文件来测试。
1. md5
- md5命令
1
2$ md5 a.txt
MD5 (a.txt) = 900150983cd24fb0d6963f7d28e17f72 - openssl命令给a.txt改个名字,你会发现结果还是一样的,甚至,直接计算字符串abc的md5,你会发现结果还是一样的
1
2$ openssl md5 a.txt
MD5(a.txt)= 900150983cd24fb0d6963f7d28e17f72由此可以验证,md5计算的是文件内容的校验值,只要内容不变,不管以何种形式,最终结果都是一致的。1
2
3
4
5
6$ mv a.txt ab
$ md5 ab
MD5 (ab) = 900150983cd24fb0d6963f7d28e17f72
$ md5 -s 'abc'
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
2. sha
Secure Hash Algorithm,安全哈希算法,本质上和md5类似。它有多种类型SHA-1、SHA-224、SHA-256,等。查一查百科,可以知道,后者出现的原因,是因为前者可以被破解,虽多是碰撞方式,但也是能破解,所以一个被破解,就设计更复杂的算法,久而久之就有了这么多种,相信随着时间发展,科技进步,后续会有更多的类型出现。
- shasum命令参数-a,指定算法类型,默认是SHA-1,可选值有1,224,256,384,512,512224,512256,可以通过
1
2
3
4
5$ shasum -a 1 a.txt
a9993e364706816aba3e25717850c26c9cd0d89d ab
$ shasum -a 256 a.txt
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad abshasum -h
命令查看 - openssl命令第二个参数sha1,就是用来指定算法,openssl毕竟是老大,支持的比shasum多了很多,可以通过
1
2
3
4
5$ openssl sha1 a.txt
SHA1(ab)= a9993e364706816aba3e25717850c26c9cd0d89d
$ openssl sha256 a.txt
SHA256(ab)= ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adopenssl sha1 -h
查看
3. 其他
这里多说一句,这几个命令都支持管道方式,也就是可以对上一个命令的结果,直接计算目标值
1 | $ cat a.txt | md5 |