oynix

于无声处听惊雷,于无色处见繁花

获取文件的md5/sha1/sha256

在网站下载文件时,经常会看到后面跟着一个校验码,它的作用是用来校验下载下来的文件是否发生改变,方式是在本地对文件用相同的算法计算效验码,如果和提供的一致,则说明文件完整且正确。

校验码的算法有多种,常用的有md5、sha1、sha256等,MacOS上自带了几个命令可以计算出这些值。新建个文本文件a.txt,将字符串abc写入,用这个文件来测试。

1. md5

  • md5命令
    1
    2
    $ md5 a.txt
    MD5 (a.txt) = 900150983cd24fb0d6963f7d28e17f72
  • openssl命令
    1
    2
    $ openssl md5 a.txt
    MD5(a.txt)= 900150983cd24fb0d6963f7d28e17f72
    给a.txt改个名字,你会发现结果还是一样的,甚至,直接计算字符串abc的md5,你会发现结果还是一样的
    1
    2
    3
    4
    5
    6
    $ mv a.txt ab
    $ md5 ab
    MD5 (ab) = 900150983cd24fb0d6963f7d28e17f72

    $ md5 -s 'abc'
    MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
    由此可以验证,md5计算的是文件内容的校验值,只要内容不变,不管以何种形式,最终结果都是一致的。

2. sha

Secure Hash Algorithm,安全哈希算法,本质上和md5类似。它有多种类型SHA-1、SHA-224、SHA-256,等。查一查百科,可以知道,后者出现的原因,是因为前者可以被破解,虽多是碰撞方式,但也是能破解,所以一个被破解,就设计更复杂的算法,久而久之就有了这么多种,相信随着时间发展,科技进步,后续会有更多的类型出现。

  • shasum命令
    1
    2
    3
    4
    5
    $ shasum -a 1 a.txt
    a9993e364706816aba3e25717850c26c9cd0d89d ab

    $ shasum -a 256 a.txt
    ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ab
    参数-a,指定算法类型,默认是SHA-1,可选值有1,224,256,384,512,512224,512256,可以通过shasum -h命令查看
  • openssl命令
    1
    2
    3
    4
    5
    $ openssl sha1 a.txt
    SHA1(ab)= a9993e364706816aba3e25717850c26c9cd0d89d

    $ openssl sha256 a.txt
    SHA256(ab)= ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
    第二个参数sha1,就是用来指定算法,openssl毕竟是老大,支持的比shasum多了很多,可以通过openssl sha1 -h查看

3. 其他

这里多说一句,这几个命令都支持管道方式,也就是可以对上一个命令的结果,直接计算目标值

1
2
3
4
5
6
7
8
9
10
11
$ cat a.txt | md5
900150983cd24fb0d6963f7d28e17f72

$ cat a.txt | openssl md5
900150983cd24fb0d6963f7d28e17f72

$ cat a.txt | shasum -a 256
a9993e364706816aba3e25717850c26c9cd0d89d -

$ cat a.txt | openssl sha256
a9993e364706816aba3e25717850c26c9cd0d89d
------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/04/576d53e2ea44/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道