简介: Windows系统中通过 certutil -hashfile 文件名 hash算法
dos命令可以查看文件的MD5,SHA1,SHA256 哈希校验值,无需第三方工具;通过 https://www.atool99.com/file_hash.php 在线获取 CRC-32、MD5、SHA1、RIPEMD-160、SHA256、SHA512、SHA3-224、SHA3-256、SHA3-384、SHA3-512 哈希校验值。
certutil -hashfile 语法
支持的hash函数有CRC-32,MD5,SHA1,RIPEMD-160,SHA256,SHA512,SHA3-224,SHA3-256,SHA3-384,SHA3-512。
certutil -hashfile
语法如下:
用法:
CertUtil [选项] -hashfile InFile [HashAlgorithm] 通过文件生成并显示加密哈希
选项:
-gmt -- 将时间显示为 GMT
-seconds -- 用秒和毫秒显示时间
-v -- 详细操作
-privatekey -- 显示密码和私钥数据
在win7 / win10 x64中测试以上选项发现都没有作用。
CertUtil -? -- 显示动词列表(命名列表)
CertUtil -hashfile -? -- 显示 "hashfile" 动词的帮助文本
CertUtil -v -? -- 显示所有动词的所有帮助文本
注:
win7 / win10 x64中支持的 HashAlgorithm:
- SHA1
- MD5
- SHA256
- SHA512
Note:
- 省略
HashAlgorithm
参数时,默认为SHA1。 - 以上哈希函数中字母和数字之间不能试用下划线。
- win7中HashAlgorithm 的名称中的字母必须大写,不支持小写(但在win10中大小写均支持)。若用小写字母名称,出现以下错误:
CertUtil: -hashfile 失败: 0xd00000bb (-805306181)
CertUtil: WsResetMetadata
windows cmd命令帮助文档并未说明 HashAlgorithm
都支持那些,微软官网也未加说明。 因此使用前,需要验证当前的windows操作系统 是否支持以下的hash函数。
- CRC32
- MD5
- SHA1
- RIPEMD-160
- SHA256
- SHA512
- SHA3-224
- SHA3-256
- SHA3-384
- SHA3-512
命令行验证支持以上hash函数的dos批处理文件:
@echo off
rem 如果文件名有空格,需要用双引号包含
set file=d:\dos2\2.chm
set hash=CRC32 MD5 SHA1 RIPEMD160 SHA256 SHA512 SHA3-224 SHA3-256 SHA3-384 SHA3-512
for %%a in (%hash%) do (
call :verhash %%a
)
pause
exit
:verhash
:: 参数1 :hash函数名
certutil -hashfile %file% >nul 2>nul %~1 && echo support %~1 || echo unsupport %~1
goto :eof
其中的文件名 d:\dos2\2.chm
可替换为自己的文件名。
输出:
unsupport CRC32
support MD5
support SHA1
unsupport RIPEMD160
support SHA256
support SHA512
unsupport SHA3-224
unsupport SHA3-256
unsupport SHA3-384
unsupport SHA3-512
win7 中 certutil -hashfile 提取hash值方法
certutil -hashfile 文件名 hash算法
命令执行如下:
certutil -hashfile d:\dos2\2.chm MD5
MD5 哈希(文件 d:\dos2\2.chm):
f2 c4 60 7b 52 6d ed 13 02 21 25 ca 85 26 32 b1
CertUtil: -hashfile 命令成功完成。
需要的hash值在命令执行结果的第2行,且都是每2位用空格分割,可利用 for /f 命令提取,批处理代码如下:
hash.bat
@echo off
:: 参数1:文件名
set file="%~1"
set hash=MD5 SHA1 SHA256 SHA512
setlocal enabledelayedexpansion
for %%a in (%hash%) do (
call :gethash %%a !file! rs
echo !file! %%a value:!rs!
)
pause
exit
:gethash
:: 参数1-3 1:hash函数名 2:文件名 3:返回hash值
for /f "skip=1 tokens=* delims=" %%i in ('certutil -hashfile %2 %~1') do (
set rs=%%i& set rs=!rs: =!& set %3=!rs!& goto :eof
)
测试:
$ hash.bat 2.chm
"2.chm" MD5 value:f2c4607b526ded13022125ca852632b1
"2.chm" SHA1 value:58dd7f9c4a760f023c904a4e975b454d2ae58caf
"2.chm" SHA256 value:849c7582a569c631534c56dc98c4507a2c285fc2a3c63b54f862f47973df95b5
"2.chm" SHA512 value:89ef681ff18ebe6aad47ab4d616f5d56f5038c60dc95b67c2029de35b9ef16afc47c3065263ccaf72c7a1942026bf0b4ba9925aff007c04d7c937352467ae7da
win10 中 certutil -hashfile 提取hash值方法
certutil -hashfile 文件名 hash算法
命令执行如下:
C:\Users\ssy\Desktop>certutil -hashfile template.md md5
MD5 的 template.md 哈希:
95c48e3a78dce88505766894fbec7cca
CertUtil: -hashfile 命令成功完成。
win10 中和 win7 的差别在于 hash 值并未每2位用空格分隔,可直接提取。
hash.bat
@echo off
:: 参数1:文件名
set file="%~1"
set hash=MD5 SHA1 SHA256 SHA512
setlocal enabledelayedexpansion
for %%a in (%hash%) do (
call :gethash %%a !file! rs
echo !file! %%a value:!rs!
)
pause
exit
:gethash
:: 参数1-3 1:hash函数名 2:文件名 3:返回hash值
for /f "skip=1 delims=" %%i in ('certutil -hashfile %2 %~1') do (
set %3=%%i& goto :eof
)
在线查看文件的各种哈希校验值
推荐一个在线查看文件的各种哈希校验值的网站:
https://www.atool99.com/file_hash.php