CertUtil是一个预装的Windows工具,可以用来生成哈希校验和:
certUtil -hashfile pathToFileToCheck [HashAlgorithm]
HashAlgorithm选择。MD2 MD4 MD4 MD5 SHA1 SHA256 SHA384 SHA384 SHA512
因此,例如,下面的文件C:\TEMP\MyDataFile.img
会生成一个MD5校验和:
CertUtil -hashfile C:\TEMP\MyDataFile.img MD5
要获得类似于*Nix系统的输出,你可以添加一些PowerShell魔法:
$(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ",""
有一个内置的实用程序,如这个其他答案中所述。很不错的。
我使用的是HashCheck最新版本),它将自身集成为文件的属性页,并包含一个上下文菜单,可以与哈希检查文件(SFV)进行比较。
PowerShell 4及以上版本包含了 Get-FileHash cmdlet。
这里有一个我以前用过的,与资源管理器的 “属性 "对话框很好地集成了。夏天属性](http://www.frozenlogic.org/summerproperties.shtml)。它是**开源的**,也有一个**x64版本的**。
我也喜欢Safer Networking的FileAlyzer,它也提供了额外的功能。但仅仅就校验和而言,Summer Properties是轻量级的,也能胜任。
我发现这个PowerShell脚本:
param([switch]$csv, [switch]$recurse)
[Reflection.Assembly]::LoadWithPartialName("System.Security") | out-null
$sha1 = new-Object System.Security.Cryptography.SHA1Managed
$pathLength = (get-location).Path.Length + 1
$args | %{
if ($recurse) {
$files = get-childitem -recurse -include $_
}
else {
$files = get-childitem -include $_
}
if ($files.Count -gt 0) {
$files | %{
$filename = $_.FullName
$filenameDisplay = $filename.Substring($pathLength)
if ($csv) {
write-host -NoNewLine ($filenameDisplay + ",")
} else {
write-host $filenameDisplay
}
$file = [System.IO.File]::Open($filename, "open", "read")
$sha1.ComputeHash($file) | %{
write-host -NoNewLine $_.ToString("x2")
}
$file.Dispose()
write-host
if ($csv -eq $false) {
write-host
}
}
}
}
来源。在PowerShell中计算SHA1](http://bradwilson.typepad.com/blog/2010/03/calculating-sha1-in-powershell.html)
它利用了.NET,我想你应该已经安装了.NET。
我在这里添加这个只是因为我没有看到任何完整的powershell例子,准备复制粘贴:
C:\> powershell "Get-FileHash %systemroot%\system32\csrss.exe"
Algorithm Hash
--------- ----
SHA256 CB41E9D0E8107AA9337DBD1C56F22461131AD0952A2472B4477E2649D16E...
C:\> powershell -c "(Get-FileHash -a MD5 '%systemroot%\system32\csrss.exe').Hash"
B2D3F07F5E8A13AF988A8B3C0A800880
C:\> CertUtil -hashfile "%systemroot%\system32\csrss.exe" MD5 | findstr -v file
b2 d3 f0 7f 5e 8a 13 af 98 8a 8b 3c 0a 80 08 80
C:\>
自从Windows 8以来,certutil
的输出似乎发生了变化,所以我以前的过滤器隔离哈希值的方法已经不起作用了。外来的空格也没有了—-在编写脚本时少了一件需要担心的事情。下面是新的可复制粘贴的演示:
C:\>CertUtil -hashfile "%systemroot%\system32\csrss.exe" | findstr -v ash
0300c7833bfba831b67f9291097655cb162263fd
C:\>CertUtil -hashfile "%systemroot%\system32\csrss.exe" SHA256 | findstr -v :
a37d616f86ae31c189a05b695571732073b9df97bf5a5c7a8ba73977ead3e65b
C:\>ver
Microsoft Windows [Version 10.0.16299.1451]
C:\>
为了使其更有弹性,防止因certutil
中的另一个变化而被破坏,我们应该寻找有非hex字符的行来过滤掉:[^0-9a-zA-Z]
。
C:\>CertUtil -hashfile "C:\windows\fonts\arial.ttf" | findstr -vrc:"[^0123-9aAb-Cd-EfF]"
12c542ef8c99cf3895ad069d31843a5210857fdc
C:\>powershell -c "Get-FileHash -?" | findstr gori
Get-FileHash [-Path] <string[]> [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160}]
Get-FileHash -LiteralPath <string[]> [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 |
Get-FileHash -InputStream <Stream> [-Algorithm {SHA1 | SHA256 | SHA384 | SHA512 | MACTripleDES | MD5 | RIPEMD160}]
C:\>certutil -hashfile -v /? | findstr gori
CertUtil [Options] -hashfile InFile [HashAlgorithm]
Hash algorithms: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512
为什么这个反hex regex会这么奇怪?请看 这个问题 来了解 findstr
中的 regex 范围是如何不能正常工作的。
请注意,powershell的默认值是SHA256,而certutil
的默认值仍然是SHA1。所以在需要的地方明确指定你的算法。你可以像这样快速检查可用的选项:
&001
Microsoft File Checksum Integrity Verifier](http://download.microsoft.com/download/c/f/4/cf454ae0-a4bb-4123-8333-a1b6737712f7/Windows-KB841290-x86-ENU.exe)_。下载后,解压文件,打开命令提示符,进入解压路径,然后输入以下命令:
fciv -md5 filepath\filename.extension
例如:
fciv -md5 d:\programs\setup.exe
根据pbarney的评论,建立一个批处理文件,将pbarney的评论转到最高票数的答案上。这可以将任何文件的MD5哈希值复制到批处理文件中:
@ECHO OFF
FOR /f "tokens=*" %%i IN ('@certutil -hashfile %1 MD5 ^| find /v "hash of file" ^| find /v "CertUtil"') DO SET r=%%i
SET r=%r: =%
ECHO %r% | clip
将其作为一个上下文菜单项:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Get MD5]
@="Copy MD5 to Clipboard"
[HKEY_CLASSES_ROOT\*\shell\Get MD5\command]
@="\"C:\<PATH TO BAT FILE>\getMD5.bat\" \"%1\""
这只是一个cmd shell脚本,它使用了 tedr2的答案 ,但删除了多余的输出行和空格:
:: hash.cmd : Get a hash of a file
:: p1: file to be hashed
:: p2: Hash algorithm in UPPERCASE
:: p3: Output file
@setlocal
@for /f "tokens=*" %%a in (
'@certutil -hashfile %1 %2 ^|find /v "hash of file" ^|find /v "CertUtil"'
) do @(
@set str=%%a
)
@set str=%str: =%
@echo %str%
@endlocal
。
MD5上下文菜单](http://www.vonwangelin.com/md5/)正是这样做的。它在文件的上下文菜单中增加了一个* MD5 ***选项:
MD5上下文菜单是一个免费的Windows外壳扩展软件,可以显示所选文件的MD5哈希和。这是一个小小的下载(238 KB),包含了你需要的一切。
我用的是checksum命令行实用程序,
md5
,sha1
,sha256
和sha512
。使用方法:
checksum [-t=sha1|sha256|sha512|md5] [-c=signature] [-f=]filepath
-?
, --help
, -h
, -f
打印出选项。 --file=VALUE
, -t
文件名。不区分大小写。# Check md5 for "E:\Саша Неотразима\Sasha-Irresistible.exe" file
SashaChernykh@DESKTOP-0G54NVG E:\Саша Неотразима
$ checksum -f "E:\Саша Неотразима\Sasha-Irresistible.exe"
342B45537C9F472B93A4A0C5997A6F52
# Check sha256
SashaChernykh@DESKTOP-0G54NVG E:\Саша Неотразима
$ checksum -f "E:\Саша Неотразима\Sasha-Irresistible.exe" -t=sha256
F6286F50925C6CBF6CBDC7B9582BFF833D0808C04283DE98062404A359E2ECC4
# Correct 41474147414741474147 sha256 hash or not?
SashaChernykh@DESKTOP-0G54NVG E:\Саша Неотразима
$ checksum -f "E:\Саша Неотразима\Sasha-Irresistible.exe" -t=sha256 -c 41474147414741474147
Error - hashes do not match. Actual value was 'F6286F50925C6CBF6CBDC7B9582BFF833D0808C04283DE98062404A359E2ECC4'
# One more attempt
SashaChernykh@DESKTOP-0G54NVG E:\Саша Неотразима
$ checksum -f "E:\Саша Неотразима\Sasha-Irresistible.exe" -t=sha256 -c F6286F50925C6CBF6CBDC7B9582BFF833D0808C04283DE98062404A359E2ECC4
Hashes match..
这不是一个内置的工具,但它是一个非常好的选项 http://checksumcompare.sanktuaire.com
如果两个文件夹不同或相同,你可以通过文件和/或摘要来比较检查和。
你可以使用MD5sums for Windows,下载量只有28 KB Cygwin,如果你想做的只是计算MD5哈希值的话,可能会显得有些多余。
好了,我做了一个程序](http://slorunnerstipsandtricks.blogspot.com/2014/05/file-hash-checker-v11.html)来计算一个文件的散列值。希望对你有帮助。
这个程序是做什么的?它可以计算出SHA-1散列值,SHA-384散列值,MD5散列值和SHA-256散列值。好了,就这样吧 :)
对于一个在Windows或其他环境下工作的解决方案,使用Python。
1.安装Python—-Windows安装程序可以在https://www.python.org/downloads/
2.下载一个经过测试的cksum
实现,例如 http://pastebin.com/raw.php?i=cKATyGLb —-将其内容保存到c:\cksum.py
或任何你觉得方便的地方
然后执行校验:
python c:\cksum.py INPUTFILE
不像编译后的实用程序那么快,但与Unix cksum
兼容,可以在任何地方运行。