文件校验MD5、SHA1、CRC32、sha256、cksum

前段时间XcodeGhost余波未了,所以所有开发者不得不重新审视开发工具的安全性。

相关新闻

有关Xcodeghost的问题和解答

Validating Your Version of Xcode

根据上面两篇文章,苹果官方的方法比较封闭,是建议你开启Mac中的Gatekeeper程序进行校验。

但比较通用的做法是校验文件的MD5、SHA-1、CRC32这些值,一般来说每一个文件对应的这些值是唯一的,但是根据抽屉原理,确实有出现碰撞的可能性。

Windows下比较著名的校验程序hash下载:http://keir.net/download/hash.zip (下载页:http://www.keir.net/hash.html)

hash的最后一次更新是在2006年,最后一个版本是1.04修复了超过4GB文件的错误。

下面以tomcat为例校验tomcat的完整性。

进入tomcat8.0的下载页面:http://tomcat.apache.org/download-80.cgi

文件校验MD5、SHA1、CRC32、sha256、cksum_第1张图片



下载图中的zip文件后,再点击后面的md5链接和sha1链接

md5

文件校验MD5、SHA1、CRC32、sha256、cksum_第2张图片

sha1

文件校验MD5、SHA1、CRC32、sha256、cksum_第3张图片

然后我们打开hash

文件校验MD5、SHA1、CRC32、sha256、cksum_第4张图片

点击browser找到刚才下载的文件,点击打开

文件校验MD5、SHA1、CRC32、sha256、cksum_第5张图片

如果文件比较小,可以立刻看到结果

文件校验MD5、SHA1、CRC32、sha256、cksum_第6张图片

可以看到MD5和SHA1与上面结果一致,可以确信文件没有问题。

但需要注意的是,MD5的安全性不如SHA1,目前已经有程序可以在原文件后填充垃圾字符使得两个文件MD5文件一致,也有出现MD5相同,但在控制台打印不同字符的程序。所以一般情况下建议优先使用SHA1校验或者多个校验手段结合。

 再来看看JDK和Oracle数据库文件的校验,由于Oracle的文件通常采用linux的命令校验,通常这些命令在windows下默认是没有的,这里有个两工具可以在windows下实现这个功能

JDK提供sha256和md5校验值,Oracle数据库提供的是cksum校验值

shasum下载地址:http://www.nfllab.com/sums/sums.zip

UnxUtils下载地址:http://sourceforge.net/projects/unxutils/ (可能无法直接访问)

下面以UnxUtils安装为例,shasum的安装类似

下载完成后解压,笔者解压到了到UnxUtils文件夹

文件校验MD5、SHA1、CRC32、sha256、cksum_第7张图片

依次打开usr\local\wbin文件夹,可以看到这里有个cksum.exe,然后我们把文件路径复制下来

然后添加到环境变量,win10是此电脑-->右键属性-->高级系统设置-->高级-->环境变量,找到系统变量的path,双击编辑,然后按Home键到最前面,粘贴刚才复制的路径,然后加个英文分号;最后就是点几次确定

文件校验MD5、SHA1、CRC32、sha256、cksum_第8张图片

然后我们检验以下cksum命令,win+R,输入cmd回车,在命令行输入

cksum --help
回车之后可以看到cksum的使用方法

文件校验MD5、SHA1、CRC32、sha256、cksum_第9张图片

Microsoft Windows [版本 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Users\LENOVO>cksum --help
Usage: cksum [OPTION]... [FILE]...
Print CRC checksum and byte counts of each FILE.

  --help      display this help and exit
  --version   output version information and exit

Report bugs to .

C:\Users\LENOVO>

shasum的结果

C:\Users\LENOVO>sha256sum --help
Usage: sha256sum [OPTION] [FILE]...
Print or check SHA256 (256-bit) checksums.
With no FILE, or when FILE is -, read standard input.

  -b, --binary            read in binary mode (default unless reading tty stdin)
  -c, --check             read SHA256 sums from the FILEs and check them
  -t, --text              read in text mode (default if reading tty stdin)

The following two options are useful only when verifying checksums:
      --status            don't output anything, status code shows success
  -w, --warn              warn about improperly formatted checksum lines

      --help     display this help and exit
      --version  output version information and exit

The sums are computed as described in FIPS-180-2.  When checking, the input
should be a former output of this program.  The default mode is to print
a line with checksum, a character indicating type (`*' for binary, ` ' for
text), and name for each FILE.

Report bugs to .



下面我们下载JDK

文件校验MD5、SHA1、CRC32、sha256、cksum_第10张图片

Checksum页面

文件校验MD5、SHA1、CRC32、sha256、cksum_第11张图片

校验结果

文件校验MD5、SHA1、CRC32、sha256、cksum_第12张图片

可以看到MD5结果一致,但md5一致可信度并不高

下面我们用命令来看一下结果

文件校验MD5、SHA1、CRC32、sha256、cksum_第13张图片

Microsoft Windows [版本 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Users\LENOVO>md5sum H:\开发工具\JDK\jdk-8u60-windows-i586.exe
\0936c6d4d7643e2df69abdade59b14ea *H:\\\\JDK\\jdk-8u60-windows-i586.exe
md5sum: write error

C:\Users\LENOVO>sha256sum H:\开发工具\JDK\jdk-8u60-windows-i586.exe
\2c2eb85ca8db7853cf3a0b074268a4e9095b0126e9e5a3c4b57d030053b99061 *H:\\\\JDK\\jdk-8u60-windows-i586.exe
sha256sum: write error

C:\Users\LENOVO>
可以看到sha256和md5的值一致,可以确信下载是正确的

关于Oracle数据库安装包的校验,以前写过一篇:在windows下校验Oracle数据库安装包的完整性

Oracle数据库只提供了cksum校验码,所以需要使用UnxUtils

Oracle数据库官方下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html

Oracle12c的校验码:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/database12c-win64-download-1968077.html

那么官方如果没有提供校验值,该如何判断呢?通常的做法是比较文件大小与官方描述是否符合,尽量从官方下载,从其它渠道下载时多下载几次比对文件是否一致,使用工具监测软件行为等等。



你可能感兴趣的:(随想)