文件校验
比如在apache 下载的 tomcat 的时候,一般下载长这样:
Core:
- zip (pgp, sha512)
 - tar.gz (pgp, sha512)
 - 32-bit Windows zip (pgp, sha512)
 - 64-bit Windows zip (pgp, sha512)
 - 32-bit/64-bit Windows Service Installer (pgp, sha512)
 
或者下载rocketmq
Binary: rocketmq-all-4.7.1-bin-release.zip [PGP] [SHA512]
后面都有对应的PGP签名文件和对应的HASH加密字符串文件。
之所以需要校验是验证文件完整性,防止篡改等非法验证,一般可以通过校验和或签名来验证从镜像下载的文件。
1. Hash校验
校验和算法很多;
比如:SHA-1,SHA-256,SHA-512,MD5。
| Hash | Windows OS | Linux OS | Mac | 比较文件 | 
|---|---|---|---|---|
| Windows | Linux | Mac | ||
| SHA-1 | certUtil -hashfile file SHA1 | sha1sum file | shasum -a 1 file | file.sha1 | 
| SHA-256 | certUtil -hashfile file SHA256 | sha256sum file | shasum -a 256 file | file.sha256 | 
| SHA-512 | certUtil -hashfile file SHA512 | sha512sum file | shasum -a 512 file | file.sha512 | 
| MD5 | certUtil -hashfile file MD5 | md5sum file | md5 file | file.md5 | 
Demo:
比如下载 rocketmq-all-4.7.1-bin-release.zip 和对应的SHA512 ,就可以得到rocketmq-all-4.7.1-bin-release.zip(发行版)和apache-tomcat-8.5.60-windows-x64.zip.sha512(hash)两个文件。
rocketmq-all-4.7.1-bin-release.zip: 5DC22C3A 981FDD2A 99BC95C2 EA29C258 227CDB1D
                                    64FC7E54 A83486EE 099EE478 B66E19A4 4BF07577
                                    54039832 D97C4AA0 86FEA4FE 445748C9 861C8AB8
                                    0B611868进行校验:
certUtil -hashfile  rocketmq-all-4.7.1-bin-release.zip  SHA512输出结果:
SHA512 的 D:\distributed-tools\rocketmq-all-4.7.1-bin-release.zip 哈希:
5dc22c3a981fdd2a99bc95c2ea29c258227cdb1d64fc7e54a83486ee099ee478b66e19a44bf0757754039832d97c4aa086fea4fe445748c9861c8ab80b611868可以将这个哈希值和apache-tomcat-8.5.60-windows-x64.zip.sha512 里的哈希值比较一下。
2. 签名校验
签名校验一般需要下载2文件:
- release 版正常程序文件,如
.tar,.tar.gz,.zip后缀结尾等。 - release 版对应的签名文件,如
asc后缀结尾等。 
比如下载 64-bit Windows zip 和对应的 pgp,就可以得到apache-tomcat-8.5.60-windows-x64.zip(发行版)和apache-tomcat-8.5.60-windows-x64.zip.asc(分离的签名)两个文件。
分离签名的内容大概就是一串加密字符串:
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAl+tcrMACgkQEMAcWi9g
WefpmBAAqzmWd0m0qeqziRILu6xsv3aqROlyQRGhRFbyaUZ94tPbZjufZ/XCb7wp
nFbPo4zlru1LjN0nqpj8rtCVNNcLmefKz0nIsxMx4dMDR5nkHeyCCrAfBeELrIKA
z/0OH8QjLYGfa4vLPTt+8uzAZEsnE8liWWrf7nuWc8gQZqc3OAyEpWtPv2j/Hy+h
c2CggthI8/mIf+x2vRaWHXWQCiqmhunm7fDmrcPfujwz/0ub3xXqhbeahj7I/f60
z2FxslfUQmDg4OpwINyx8kipRIR/3MS/Jjf4OUmZ8EKst7MdIAomd9qs8B/2DUgH
xq9rT+nrhKu2zTpBG5KLLc0jHafl/rf3ndlWn2+vAl2EtdlVmVDU+feniwmB+vez
1/1FEg2aNZCds73RLrlRp+m9SpBP66TEgLd6iK+OMEMCfBBNcjwNNsdV4wYLJzZ+
Gep9frYgH19bPMrtH/9rnYdLivezcVN9Aumy2wsBlKhCF87fIxWzwFbl0m2Ewu9Z
l7EaQzawSRRcerxUrZEt/wSeke6NLo3z/1pBJgcj4CtvRjx+L5vEACdAczk0xbTs
HKRJSXLimzD9zJYHWBXruJ/Y4ePW6WsRPc7mwLOP/dAxglCX5tJz9XBD+zmHHlym
C8lmhLIzrjhKcoldqwFmMNb6+1daInBWs0C59cu48h/ut0zEapQ=
=5nOe
-----END PGP SIGNATURE-----签名校验时,需要同时指定分离的签名和发布文件。
gpg –verify apache-tomcat-8.5.60-windows-x64.zip.asc apache-tomcat-8.5.60-windows-x64.zip如果出现:public key not found
就需要获取key,会提示对应的加密KEY的ID
gpg –keyserver pgpkeys.mit.edu –recv-key KEY_ID也可以先验证KEY_ID的真实性:
gpg --fingerprint KEY_ID会出现对应的KEY_ID 和对应的开发人员信息,比如apache的可以在网站找到对应的成员,就说明是开发者的签名。
再次重新验证:
gpg –verify apache-tomcat-8.5.60-windows-x64.zip.asc apache-tomcat-8.5.60-windows-x64.zip



