macOS:计算文件夹的SHA散列值的一个实现(dshasum)

更新:

2018-10-31  第一个发布版本 v1.0.1

 

说在前面

一直以来,有个小小的需求,在Mac上对一个文件夹计算SHA散列值是一个小小的挑战,这个需求来自于人们对于下载文件的安全和完整性考虑的结果。在网上有多种可以达到类似目的的解释,比如superuser上的这个,但是如果要达到不依赖于环境,还是需要一定的额外工作的。

一直以来,总会因为各种原因,Mac用户需要从非Apple官方下载macOS(Mac OS X)系统的安装程序,而苹果上的安装程序是一种程序包,本质上是文件夹,一般的下载文件都是个人制作的安装程序的打包文件,比如包装在dmg文件中。

在系统升级是,如果要制作一个系统安装U盘,一般大家最关心InstallESD.dmg文件是否安全完整、是否保持原汁原味;有的人会以运行安装程序的方式升级,虽然系统有App签名的技术和检查机制,但不是强制的,所以Mac用户一般忽略这些,那么这个app的内部如果被修改也会是一个潜在的问题。

总之如果能有一种让Mac用户对下载的安装程序实现方便的、跨环境的校验,那么安全性就提高了很多,至少阿猫阿狗的一般匪盗就此被曝光于天下了。

本人维护的第三方的、持续更新的各macOS版本的SHA散列值的博客,也是专门为了Mac用户校验从第三方获得的macOS安装程序的安全完整性,这些都是本人从App Store上下载下来后计算的散列值,从前只能做InstallESD.dmg文件,现在有了这个工具就可以做全App的散列值的计算和校验了。

最近利用了点业余时间,查找资料、编写和测试,做了一个,供大家使用。其实,就是一个Bash脚本,开源,适合于他人借鉴和改进。这个脚本取名为:dshasum。其中字母“d”是Directory的第一个字母,而shasum命令是macOS系统自带的命令,二者结合起来,简短而直抒胸臆,就是它了。

下载安装

去TonyLiu2ca在Github的家,或者这个连接:https://github.com/Tonyliu2ca/Mac-Admin-Scripts/blob/master/dshasum
下载下来后,设置好文件运行属性。我的习惯一般是把自己的或者第三方的软件都放在/usr/local/bin中。大家根据自己的习惯,随意,只要是设置好PATH后,可以直接在终端中直接运行就好。

使用说明

命令行: 

dshasum -[h|?|v] [-f algorithm] [-p algorithm] [-t cheksum] path ...

命令行参数


      path           A full path of a directory
      -p algorithm   Path checksum algorithm, default=1
                     Valide shasum algorithm option, 1(default), 224, 256, 384, 512, 512224, 512256
      -f algorithm   files inside path checksum algorithm
                     default: equal to -p option
      -h|-?          Show this help
      -v             Verbose mode, which is good for debuging
      -t             [not implemented in this version]

Examples:
      使用SHA256算法计算文件和文件夹
      dshasum -p 256 /var/root

      使用SHA1算法计算文件,然后用SHA256计算文件夹
      dshasum -p 256 -f 1 /var/root

      使用SHA1算法计算文件,然后用SHA254计算文件夹,并显示过程详细信息
      dshasum -vp 224 /var/root

举例说明:

看帮助,运行命令:

dshasum -h

或者

dshasum -?

比如我们下载了“Install macOS Mojave.app”,并且它保存在应用程序目录(/Applications)中, 它的全目录名是:
/Applications/Install macOS Mojave.app
那么运行下面的命令来计算:

dshasum "/Applications/Install macOS Mojave.app"

对于更愿意使用拖拽的用户来说,操作如下:

  1. 在终端中输入:
    dshasum

     

  2. 输入一个空格
  3. 将该App从访达(Finder)窗口中拖放到这个终端窗口上

最终会显示如下:

dshasum /Applications/Install\ macOS\ Mojave.app

 

如果是从网上下载的dmg文件后,装载的效果类似于:

dshasum /Volumes/macOS\ 10.14.1\ Mojave/Install\ macOS\ Mojave.app

     
注意事项:

  1. path及其之内的所有子文件夹和文件,一定是运行该命令的用户或者用户组具有可读和可执行的权限,也就是至少是“r-x”,否则计算的值无法保证。

  2. 如果需要可以使用sudo,不影响计算结果

  3. 即便是目录或者App的位置改变了,得到的SHA散列值也是同样的

  4. 影响散列值计算的因素:文件名(包括大小写),文件内容,有文件的目录名称

  5. 不影响散列值的因素,比如:文件或文件夹的日期,用户和权限等等都不影响散列值的计算
     

你可能感兴趣的:(sha,shasum,dshasum,散列值,文件夹,技术,Mac,OS,X安全,Mac,OS,X实用技巧)