Windows 7 上是否有内置校验和实用程序?

use*_*996 785 windows-7 checksum hashing

Windows 7 上是否有内置的校验和/哈希实用程序?

小智 1358

CertUtil是预安装的 Windows 实用程序,可用于生成哈希校验和:

certUtil -hashfile pathToFileToCheck [HashAlgorithm]
Run Code Online (Sandbox Code Playgroud)

哈希算法选择: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512

因此,例如,以下内容为文件生成 MD5 校验和 C:\TEMP\MyDataFile.img

  CertUtil -hashfile C:\TEMP\MyDataFile.img MD5
Run Code Online (Sandbox Code Playgroud)

要获得类似于 *Nix 系统的输出,您可以添加一些 PowerShell 魔法:

$(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ",""
Run Code Online (Sandbox Code Playgroud)

  • MD5.bat: @certutil -hashfile %1 MD5|find /v "hash of file"|find /v "CertUtil" (20认同)
  • @lalebarde MD5 只有一种标准。如果您在同一个文件上得到不同的结果,那是因为某些东西对该文件进行了一些更改并导致散列不同。这是 MD5 和其他散列标准最重要的功能之一。 (16认同)
  • 请注意,`certutil` **在 Windows PE 中不可用**,因此如果您尝试在 PE 中的预部署任务脚本中计算校验和,则必须使用诸如 **Microsoft FCIV* 之类的外部工具*. (8认同)
  • @mwfearnley,当散列算法参数未指定时,看起来`SHA1`是默认值,并且在指定时,散列算法参数区分大小写。所以,我首先尝试了 `certutil -hashfile ... sha1` 但它失败了。然后我离开了`...sha1`,它起作用了。然后我重试了 `...SHA1` 并且奏效了。(我重复了 md5/MD5 的测试。) (5认同)
  • 这太不可思议了,但是 `CertUtil -hashfile C:\TEMP\MyDataFile.img MD5` 不会产生与 Linux 下的 `md5sum /tmp/MyDataFile.img` 相同的哈希值(我保证它是带有挂载的同一个文件) (4认同)
  • 似乎在旧版本的 Windows 中,CertUtil 可能存在,但 `-hashfile` 可能不支持不同的哈希算法,只产生一个 SHA-1 和。 (3认同)
  • 从编辑日志中,这个答案是从 [SO](http://stackoverflow.com/questions/478722/what-is-the-best-way-to-calculate-a-checksum-for-a-file-那是在我的机器上)。 (3认同)
  • 奇怪的是,对于不存在的算法(例如“MD3”),我收到错误 0xd0000225,但如果算法存在但大小写错误(例如“md5”、“sHa1”),则会得到 0xd00000bb (3认同)
  • 这怎么不是公认的答案?该问题特别要求内置实用程序 (3认同)
  • @pbarney 我想你的意思是“findstr”而不是“find”?这个批处理文件只为我输出裸哈希... `@certutil -hashfile %1 MD5|findstr /v "hash of file"|findstr /v "CertUtil"` (2认同)

Tob*_*tat 223

有一个内置实用程序,如this other answer中所指定。

但是,您可能希望使用这个名为HashTab 的免费软件应用程序,它通过注册一个……嗯,文件属性对话框中的选项卡,与 Windows 资源管理器巧妙地集成在一起。它很甜。

哈希表截图

  • 我更喜欢 [HashCheck](http://code.kliu.org/hashcheck/) 而不是 HashTab,主要是因为它可以处理多个混合文件/文件夹选择,并且可以创建/验证 SFV/MD5/SHA1 文件。[我的文章](http://arstechnica.com/civis/viewtopic.php?f=15&t=33861&p=891309#p891309) 在 Ars 论坛上有更详细的介绍。 (95认同)
  • 请注意 HashTab 仅供私人免费使用!HashCheck 是开源且完全免费的(BSD 许可) (48认同)
  • 是的,有一个 cmd:CertUtil -hashfile _main.exe MD5 (36认同)
  • “有一个内置实用程序可以完全满足您的需要。但是,您可以使用其他工具来完成您没有要求的事情。” 为什么这是公认的答案? (20认同)
  • > “谢谢。不幸的是,内置对我来说是一个基本要求。” 那你为什么选择一个问题没有要求的非内置软件作为答案呢? (10认同)
  • [HashCheck](https://github.com/gurnec/HashCheck) 的维护版本也支持 SHA-256 甚至 SHA-512。 (4认同)
  • HashTab 和 HashCheck 是很棒的工具。太糟糕了,它们都不支持 SHA-256。 (3认同)
  • HashCheck 也是 85kB,很棒。 (2认同)
  • 谢谢,是的,HashTab 似乎提供了更多功能,例如更大的哈希数组……但是,伙计,**我讨厌** 要求您提供电子邮件才能获取链接的下载站点!您知道,大量垃圾邮件即将来临…… (2认同)

And*_*ore 197

我正在使用HashCheck最新版本),它将自身集成为文件的属性页,并包含一个上下文菜单来与哈希检查文件 (SFV) 进行比较。

它是免费的,而且源代码是可用的。

截屏

  • 免费、开源,与属性页和资源管理器上下文菜单集成,具有 .MD5 检查器并支持 SHA-1。更不用说它只有 85kb 并且运行速度非常快。这个应用程序**非常棒**,谢谢! (12认同)
  • AVG 标记核心 Windows 实用程序已更改 - 这是恶意软件经常做的事情。 (6认同)
  • 你可以通过巧克力安装它! (4认同)
  • @Sossenbinder 你一定找错地方了。自 14 年 12 月起支持 SHA-256。该工具至少要更新到 16 年 9 月,所以虽然它最近可能不活跃,但可能没有太多可添加的内容。https://github.com/gurnec/HashCheck/releases (4认同)
  • 热闹的应用程序。绝对是最好的。它可以通过双击创建的 file.MD5 来检查哈希!它会记住哪些文件被散列。 (3认同)
  • 我知道这真的很老了,但是在提出问题一年多之前,您是如何回答这个问题的? (3认同)
  • 安装后,AVG 将“REGSVR32.EXE”标记为病毒威胁 (2认同)

Chr*_*ong 94

PowerShell 版本 4 及更高版本包括Get-FileHash cmdlet。

powershell get-filehash -algorithm md5 <file_to_check>
Run Code Online (Sandbox Code Playgroud)

使用doskey制作一个更容易记住的持久别名。

doskey sha1sum=powershell get-filehash -algorithm sha1 "$1"
doskey md5sum=powershell get-filehash -algorithm md5 "$1"
Run Code Online (Sandbox Code Playgroud)


cre*_*tor 87

有来自 Microsoft 的 FCIV 实用程序,Microsoft File Checksum Integrity Verifier下载链接)。

Microsoft 文件校验和完整性验证器工具是不受支持的命令行实用程序,用于计算文件的 MD5 或 SHA1 加密哈希。

它没有在系统要求中显示 Windows 7,但我刚刚在 Windows 8 中使用它并且它工作正常。

  • 该实用程序对我很有用。我从 msdn 下载了一个 iso 映像并需要对其进行校验。我不想要任何第三方工具。我不需要shell集成,作者也没有要求。它来自 Microsoft 的可信来源,虽然不受支持,但它仍然有效。我在这里发布了一个链接,因为像我这样的其他人可能会发现它很有用。 (31认同)
  • 我和@creator 在一起。它可能不受支持的软件,但至少微软是作者。校验和程序对于维护安全性可能非常重要;我宁愿不从一些随机的第三方那里得到我的。 (29认同)
  • 虽然它是适合适度使用的 OKish 实用程序,但它不稳定。我在 xdelta 脚本中使用它来确定相同大小的文件是否不同,我很遗憾地说每几百个文件就会发生 1 次崩溃。这是不可靠的,所以建议:使用其他东西。 (3认同)
  • FCIV 尚未安装在我想在其上使用的任何 Windows 系统上,但 certUtil 始终存在。当我忘记要使用的工具的名称时,我希望 FCIV 不是热门搜索结果。我还希望此功能仅内置于文件属性对话框和浏览器下载管理器中。 (2认同)

小智 45

新版本的7-Zip还为您提供了只需右键单击的校验和选项(这不包括MD5)。它有SHA-1SHA-256、 CRC-32 、 CRC-64 等。

在此处输入图片说明.


对于 MD5,您可以下载HashTab并通过右键单击然后属性进行检查。

在此处输入图片说明


Chr*_*Rea 24

这是我之前使用过的,它与 Explorer 的“属性”对话框很好地集成在一起:Summer Properties。它是开源的,还有一个x64 版本

SummerProperties 屏幕截图

我也喜欢 Safer Networking 的FileAlyzer,它也提供了额外的功能。但就校验和而言,Summer Properties 是轻量级的并且可以完成这项工作。


小智 16

Nirsoft 的HashMyFiles一款小型实用程序,可让您计算系统中一个或多个文件的 MD5 和 SHA1 哈希值。您可以轻松地将 MD5/SHA1 哈希列表复制到剪贴板,或将它们保存到 text/html/xml 文件中。

HashMyFiles 也可以从 Windows 资源管理器的上下文菜单中启动,并显示所选文件或文件夹的 MD5/SHA1 哈希值。

替代文字

HashMyFiles 是免费软件且可移植。


Ami*_*idu 15

我在这里添加这个只是因为我没有看到任何完整的 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:\>
Run Code Online (Sandbox Code Playgroud)

2019 更新:

certutil自 Windows 8 以来,输出似乎发生了变化,因此我用于隔离散列的旧过滤器不再起作用。多余的空间也消失了 - 编写脚本时无需担心的一件事。这是新的可复制粘贴的演示:

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:\>
Run Code Online (Sandbox Code Playgroud)

为了使这对破损更有弹性从另一个未来的变化certutil,我们应该寻找与非十六进制字符线,以过滤掉:[^0-9a-zA-Z]。这也应该使其对其他语言环境和语言更安全。

C:\>CertUtil -hashfile  "C:\windows\fonts\arial.ttf" | findstr -vrc:"[^0123-9aAb-Cd-EfF ]"
12c542ef8c99cf3895ad069d31843a5210857fdc
Run Code Online (Sandbox Code Playgroud)

为什么那个实际的反十六进制正则表达式如此奇怪?请参阅此问题以了解正则表达式范围findstr如何无法正常工作。为了向后兼容旧certutil版本,我包含了一个额外的空格字符,但它是可选的。

请注意,powershellGet-FileHash默认值为 SHA256,但certutil仍默认为 SHA1。因此,在需要的地方明确指定您的算法。您可以像这样快速检查可用选项:

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
Run Code Online (Sandbox Code Playgroud)


小智 14

我找到了这个 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:在 PowerShell 中计算 SHA1

它利用了我假设您已经安装的 .NET

  • Win 7 自带 .NET 3.5 和 PowerShell v2,PowerShell 一直依赖于 .NET,所以如果你有 PS,你就有 .NET。:-) (7认同)

小智 8

Microsoft 文件校验和完整性验证程序。它可以计算MD5SHA-1哈希值。

下载,解压缩文件,然后打开命令提示符,转到解压缩的路径,然后键入以下命令:

fciv -md5 filepath\filename.extension
Run Code Online (Sandbox Code Playgroud)

例如:

fciv -md5 d:\programs\setup.exe
Run Code Online (Sandbox Code Playgroud)


eug*_*eug 7

不幸的是,我不知道,但微软的Sysinternals套件包括一个很好的工具,称为sigcheck


小智 7

基于 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
Run Code Online (Sandbox Code Playgroud)

要使其成为上下文菜单项:

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\""
Run Code Online (Sandbox Code Playgroud)