7zip自带hash校验功能
前言
以前, 为了校验下载后文件的hash, 还专门去找hash工具.
今天查资料, 居然7zip自带了文件hash校验功能, 这多方便啊.
好像只能校验crc32, crc64, sha1, sha256. 能校验的hash类型没有专门的hash工具多, 一般情况下的文件hash校验也够用了.
实验
7zip版本
实验用的7zip版本为v21.07(x64)
文件hash操作
比较流行的文件集合下载包, 都会自带一个hash文件.
7zip可以按照这个hash文件, 校验同级目录中的指定文件hash是否正确, 用起来挺方便的.
文件集合中的hash结果文件
hash结果文件的内容
df1f7a5d25aee5451ed1ad4dd63574b0ffafa8eb *Adobe_2022_MasterCol_win_v12.2_20211228.part01.rar
255e56d6fde5dae2befb71bccbdb3e5069470263 *Adobe_2022_MasterCol_win_v12.2_20211228.part02.rar
616712702555f2df3728563aa61204a2505c5aca *Adobe_2022_MasterCol_win_v12.2_20211228.part03.rar
d0db0f2a0c487889bedf4ed7ca70ea2dd84d2b7f *Adobe_2022_MasterCol_win_v12.2_20211228.part04.rar
5ff70fc99cc4aa33e482892c5d9504a2b025bca0 *Adobe_2022_MasterCol_win_v12.2_20211228.part05.rar
084599fd53c3da7b6a679b0871ab701581cf7105 *Adobe_2022_MasterCol_win_v12.2_20211228.part06.rar
bdb006f4344aac9f1767619e6766cb37ddcf53e0 *Adobe_2022_MasterCol_win_v12.2_20211228.part07.rar
f94407494176eefc5075f5daee17721ccdc0440b *Adobe_2022_MasterCol_win_v12.2_20211228.part08.rar
fb24a08efb2b2468d378c53a315f519872962609 *Adobe_2022_MasterCol_win_v12.2_20211228.part09.rar
79d3b5348e2ed14d254b559cf94c06a47c8e4592 *Adobe_2022_MasterCol_win_v12.2_20211228.part10.rar
96df743caf72eaa8cf80ed293f2d095263d51d0b *Adobe_2022_MasterCol_win_v12.2_20211228.part11.rar
83da5d5508743a3828e5c057a900cbc0db57f905 *Adobe_2022_MasterCol_win_v12.2_20211228.part12.rar
可以看到, hash结果文件的每一行, 前面是hash值, 后面是对应的文件.
用7zip对hash结果文件进行校验
选中hash文件, 右击选择子菜单下的hash校验菜单项.
如果提示框显示"未发现错误", 就说明hash结果文件中指定的文件们的hash值没错. 可以放心使用.
验证hash结果文件错误, 是否可以校验的出来
尝试将.sha的第1行和最后1行的头一个hash结果字母改掉, 再按照上手步骤进行校验, 可以看到显示第1个和第12个文件校验错误, 说明7zip校验hash结果文件是靠谱的.
如果不放心自动校验hash结果文件
如果对这种提示非常简单的结果不放心, 可以逐一对每个文件做hash, 然后打开hash结果文件, 自己人肉比对文件hash是否正确.
尝试制作hash结果文件
如果我们是文件集合包发布者, 我们也需要提供hash结果文件给下载者用于校验.
打开.sha256看看
ea8ec5a9a1e7f730e6dffbf9bc585567dc7856b28b14bfe249f949e882224e72 Adobe_2022_MasterCol_win_v12.2_20211228.part01.rar
6c76f75c650d378a663b2ffa2c9fe3b540c585a9c283d9f79f3c24f20d39800e Adobe_2022_MasterCol_win_v12.2_20211228.part02.rar
94417ad9bb55d9836e782049c771ea562127534673f53cead26e38c126f83c16 Adobe_2022_MasterCol_win_v12.2_20211228.part03.rar
d7a000b3382a5d2f75e40c3dac85051b441cc0a1814b10d96e621f54b580001b Adobe_2022_MasterCol_win_v12.2_20211228.part04.rar
ae9d3f980c06fbc073c495a33bb61ef31026e3d31e0e8a775546307408bef5f7 Adobe_2022_MasterCol_win_v12.2_20211228.part05.rar
044d607cc634cccb2ef95364e8dcc22895c7c9542b2d9d45be61ef601f2d5558 Adobe_2022_MasterCol_win_v12.2_20211228.part06.rar
d304c8d2167c4bf60bdbee9f90940234233a1ad5126e9faa79fa2c6d8b3e7cf8 Adobe_2022_MasterCol_win_v12.2_20211228.part07.rar
22da441c55669c4f4198e81907605ef51e1e776c63fbb35ce51dd5d0b5cea186 Adobe_2022_MasterCol_win_v12.2_20211228.part08.rar
38ca4a525308b9709e41e9a5ffab5616acfd86b016d0dbbc95b4e9a6af02317a Adobe_2022_MasterCol_win_v12.2_20211228.part09.rar
6d86224e6a8d237cbae25fbe390eab6167a9dbdd6684fc8389d49d3f3ec8e669 Adobe_2022_MasterCol_win_v12.2_20211228.part10.rar
e87edd1ab55e1276ac99354534250a1f333507bbc91e4588ffd65741a4f3c2bc Adobe_2022_MasterCol_win_v12.2_20211228.part11.rar
b4cf2177331ca002c3378ed4a58d43899c6e57342ef67a2272bd257b0f51236c Adobe_2022_MasterCol_win_v12.2_20211228.part12.rar
可以看到, 这个hash结果文件内容和软件集合发布者带的.sha文件内容是不同的.
但是用上述一键校验的菜单项, 对.sha256进行校验, 还是正确的. 说明, 可以按照sha256来发布hash校验文件给用户.
这说明, 实验用的软件包自带的.sha是SHA1的hash结果.
尝试做一个sha1的hash文件
可以看出, 用界面方式的7zip操作文件, 只能算一个选定文件集合的hash值, 无法生成选中文件的hash结果文件.
用7zip命令行试试
7zip的命令行程序是7z.exe
需要将7zip安装好的目录加入环境变量. 默认安装好的7zip是不在环境变量中的.
7zip进行hash的命令行帮助内容可以看7-zip.chm, 相关内容如下
h (Hash) command
Calculate hash values for files.
Syntax
h [-scrc{Method}] [files]
Supported methods: CRC32, CRC64, SHA1, SHA256, BLAKE2sp. Default method is CRC32.
Examples
7z h a.txt
calculates CRC32 for a.txt.
7z h -scrcsha256 a.iso
calculates SHA256 for a.iso.
7z h *
calculates CRC32 for all files in current folder and all subfolders.
Notes
7-Zip shows hash values for each file, the sum of hash values and the sum that includes all hash values of data and all hash values for filenames.
7-Zip represents hash values for CRC32 and CRC64 as integer numbers in hex.
7-Zip represents hash values For SHA1, SHA256 and BLAKE2sp as sequence of bytes in hex.
看看7z.exe具体怎么用
将7z.exe加入环境变量后, 重新打开一个cmd控制台.
进入测试目录, 执行
7z --help
看到以下结果, 这就是7zip命令行的用法.
D:\my_dev\my_tmp\test1>7z --help
7-Zip 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26
Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [@listfile]
<Commands>
a : Add files to archive
b : Benchmark
d : Delete files from archive
e : Extract files from archive (without using directory names)
h : Calculate hash values for files
i : Show information about supported formats
l : List contents of archive
rn : Rename files in archive
t : Test integrity of archive
u : Update files to archive
x : eXtract files with full paths
<Switches>
-- : Stop switches and @listfile parsing
-ai[r[-|0]]{@listfile|!wildcard} : Include archives
-ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
-ao{a|s|t|u} : set Overwrite mode
-an : disable archive_name field
-bb[0-3] : set output log level
-bd : disable progress indicator
-bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
-bt : show execution time statistics
-i[r[-|0]]{@listfile|!wildcard} : Include filenames
-m{Parameters} : set compression Method
-mmt[N] : set number of CPU threads
-mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
-o{Directory} : set Output directory
-p{Password} : set Password
-r[-|0] : Recurse subdirectories for name search
-sa{a|e|s} : set Archive name mode
-scc{UTF-8|WIN|DOS} : set charset for for console input/output
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
-scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
-sdel : delete files after compression
-seml[.] : send archive by email
-sfx[{name}] : Create SFX archive
-si[{name}] : read data from stdin
-slp : set Large Pages mode
-slt : show technical information for l (List) command
-snh : store hard links as links
-snl : store symbolic links as links
-sni : store NT security information
-sns[-] : store NTFS alternate streams
-so : write data to stdout
-spd : disable wildcard matching for file names
-spe : eliminate duplication of root folder for extract command
-spf : use fully qualified file paths
-ssc[-] : set sensitive case mode
-sse : stop archive creating, if it can't open some input file
-ssp : do not change Last Access Time of source files while archiving
-ssw : compress shared files
-stl : set archive timestamp from the most recently modified file
-stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
-stx{Type} : exclude archive type
-t{Type} : Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
-v{Size}[b|k|m|g] : Create volumes
-w[{path}] : assign Work directory. Empty path means a temporary directory
-x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
-y : assume Yes on all queries
根据7zip命令行帮助的提示, 我们写个.bat就可以用7zip产生多个文件对应的hash结果文件.
现在测试目录中试试
执行命令或写一个bat来测试.
7z h -scrcsha1 fortest7z_1.txt fortest7z_2.txt > hash.txt
执行结果
7-Zip 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26
Scanning
2 files, 34 bytes (1 KiB)
SHA1 Size Name
---------------------------------------- ------------- ------------
11c972be7e4ceedcaed306c56d29184169656196 22 fortest7z_1.txt
4d88114bd48dd259326fd437089d649abb687124 12 fortest7z_2.txt
---------------------------------------- ------------- ------------
5e51840953dac036e142dbfc75c67cdb24ced2ba-00000000 34
Files: 2
Size: 34
SHA1 for data: 5e51840953dac036e142dbfc75c67cdb24ced2ba-00000000
SHA1 for data and names: 86bfa0d938ab3a95342bef5cf56808697fdcf5d9-00000000
Everything is Ok
执行结果, 和下载软件包带的.sha文件不一样.
看来还不能用7zip来制作sha1格式hash结果文件.
总结
7zip适合用来校验下载的软件包自带的hash结果文件.
用7zip无法制作下载软件包对应的sha1格式的hash结果文件.
还没找到软件包的.sha文件是啥软件做的, 以后再研究. 自己倒是可以写一个小程序来生成sha文件.
用7zip可以制作下载软件包对应的sha256格式的hash结果文件.
sha256比sha1好(安全), 所以可以用7zip发布sha256格式的hash结果文件给用户用. 只要用户装了7zip, 就可以利用7zip提供的hash结果文件校验功能进行一键校验hash.