(不再更新)文件校验值计算器v1.4.1_Final(一个4KB不到的文件哈希值计算工具)
本帖最后由 52ECHO 于 2022-2-15 12:52 编辑## 文件校验值计算器
### 一、工具作用
#### 1. 网上下载了软件后,需要计算文件哈希值与发布者提供的哈希值进行对比,以确认下载的是正确的、完整的文件。
#### 2. 想要发布软件,提供文件哈希值可以让下载者可以核对下载的软件是否正确、完整,是否下载失败不完整,或是否被恶意篡改过。
### 二、介绍
#### 名称: 文件校验值计算器
#### 当前版本: v1.4.1 Final 最终版
#### 子版本:
>**3in1_Lite**版 计算 MD5 SHA1 SHA256 三种常用哈希值,不保存结果文件
>**3in1**版 计算 MD5 SHA1 SHA256 三种常用哈希值,自动保存结果文件到当前目录
>**7in1**版 计算 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 七种哈希值,自动保存结果文件到当前目录
> **v1.4**各版本已支持以文件夹为目标进行计算
#### 使用方法:
> 方法1、将文件拖动到脚本上,一次最多拖 9 个文件。
> 方法2、右击文件使用菜单“发送到” ->“计算文件校验值并保存到当前目录3in1.cmd” (**推荐**)
#### 关于: 本工具基于Windows CertUtil 证书工具制作。
### 三、截图与说明
> 1、 第一次使用,双击 **文件校验值计算器v1.3_3in1.cmd**,自动安装到右键“发送到”菜单。
> 2、选中需要计算的**文件 -> 右键 -> 发送到 -> 计算文件校验值并保存到当前目录3in1.cmd**
> 3、结束后自动弹出计算结果并保存在当前目录。
### 四、下载
#### 文件校验值计算器v1.4.1_Final.zip @2021.05.09
#### 蓝奏云:
#### https://echowyf.lanzoui.com/b0d8yfczi 密码:1grn
>文件名称: 文件校验值计算器v1.4.1_3in1.cmd
文件大小: 0.004 MB (3904 字节)
修改时间: 2021/05/09 09:34
MD5: C2E1E16D04FE0351DCEB7A19830500A5
SHA1: 7CDC83A354D33F264257E4C3D0CA9D0AA6EB5F15
SHA256: 8041D9E4008AF6DF7501D9AA8F414A19A8C59115A5E6132E2C8BB7A619567558
>文件名称: 文件校验值计算器v1.4.1_7in1.cmd
文件大小: 0.004 MB (4172 字节)
修改时间: 2021/05/09 09:34
MD5: D5ED9B5349CB28A1548A8116708A468B
SHA1: 102E06E1C7D738D3F09D58AFEBF98ADD83BB78C3
SHA256: BD0B95537CD94B78AB75681D1930906C8B94C1D585F38FA94624E85128B86059
>文件名称: 文件校验值计算器v1.4_Lite.cmd
文件大小: 0.004 MB (3606 字节)
修改时间: 2021/04/18 23:24
MD5: A6080B8BC23910DC35AFFE657C531BB2
SHA1: EE47BA5637B2479D4641AB7498DE458FC096F375
SHA256: 72F87D2814B61D7E73282549A8634D4EF8F76333E2DA4049BD51ED342F5BE091
### 五、日志
#### v1.4.1 2021.05.09
1、修复hash结果文件名中时间生成算法中的bug中有空格
原来如果时间是上午10点前,时间中会有空格,进而产生bug。
#### v1.4 Final 2021.04.18
1、增加 将文件夹 发送到 文件校验值计算器 的支持。
2、3in1版和7in1版 效果为:计算文件夹下所有文件(不含子文件夹)的校验值,并将结果保存于文件夹下。
3in1_Lite版 效果为:计算文件夹下所有文件(不含子文件夹)的校验值,不保存结果文件到目录。
#### v1.3 2021.04.14
1、计算结束自动在默认txt阅读器中打开
2、校验值txt文件存于文件当前目录
3、空白文件不计算
4、目录不计算
5、区分3个小版本
3in1_Lite版 计算 MD5 SHA1 SHA256 三种常用哈希值,不保存结果文件
3in1版 计算 MD5 SHA1 SHA256 三种常用哈希值,自动保存结果文件到当前目录
7in1版 计算 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 七种哈希值,自动保存结果文件到当前目录
#### v1.2 2021.04.14
1、计算结束自动在默认txt阅读器中打开
2、校验值txt存于文件当前目录
#### v1.1 2021.04.14
1、添加到右键“发送到”菜单快捷使用方式
#### v1.0 2021.04.14
1、计算文件的 MD5 SHA1 SHA256 值
### 六、源码
既然被规定移动到源码区了,那就贴下`文件校验值计算器v1.4_3in1`的源码吧,其他版本源码请直接下载查看。
#### bat源码
```
@ECHO OFF&TITLE 文件校验值计算器v1.4_3in1 by.52Echo
if not %1.==. GOTO:_START
color 0e & ECHO. & ECHO. 没有文件要计算校验值!& ECHO.
ECHO. 请右击文件使用菜单“发送到” -^>“计算文件校验值并保存到当前目录3in1.cmd”...& ECHO.
copy /y "%~f0" "%APPDATA%\Microsoft\Windows\SendTo\计算文件校验值并保存到当前目录3in1.cmd" >nul 2>nul & pause & EXIT /B 1
:_START
setlocal enabledelayedexpansion
mode con: cols=80 lines=20
SET "hash_out_MD5=MD5: "
SET "hash_out_SHA1=SHA1: "
SET "hash_out_SHA256=SHA256: "
IF NOT EXIST "%~1" GOTO:_END
set str_date=%date:~,4%-%date:~5,2%-%date:~8,2%
set str_time=%time:~,2%-%time:~3,2%-%time:~6,2%
set str_dt=%str_date%_%str_time%
set str_dt=%str_dt: =%
SET "TEMP_FILE=Hash_%str_dt%.txt"
CALL:HashCalc "%~1"
IF NOT EXIST "%~2" GOTO:_END
CALL:HashCalc "%~2"
IF NOT EXIST "%~3" GOTO:_END
CALL:HashCalc "%~3"
IF NOT EXIST "%~4" GOTO:_END
CALL:HashCalc "%~4"
IF NOT EXIST "%~5" GOTO:_END
CALL:HashCalc "%~5"
IF NOT EXIST "%~6" GOTO:_END
CALL:HashCalc "%~6"
IF NOT EXIST "%~7" GOTO:_END
CALL:HashCalc "%~7"
IF NOT EXIST "%~8" GOTO:_END
CALL:HashCalc "%~8"
IF NOT EXIST "%~9" GOTO:_END
CALL:HashCalc "%~9"
:_END
IF EXIST %TEMP_FILE% start %TEMP_FILE%
ECHO.&ECHO.2秒后自动关闭...&timeout /t 2 >nul
EXIT /B 0
:HashCalc _path
IF NOT EXIST "%~1\" CALL:CalcAll "%~1" &EXIT /B 0
pushd "%~1\"
FOR %%i in (*) do CALL:CalcAll "%%i"
IF EXIST %TEMP_FILE% start %TEMP_FILE%
popd
EXIT /B 0
:CalcAll _file
ECHO.正在计算文件: %1
CALL:Show_file %1>>%TEMP_FILE%
IF %~z1==0 ECHO.空白文件,不做计算!&EXIT /B 2
CALL:Calc %1 MD5>>%TEMP_FILE%
CALL:Calc %1 SHA1>>%TEMP_FILE%
CALL:Calc %1 SHA256>>%TEMP_FILE%
ECHO.>>%TEMP_FILE%
ECHO.完成.
EXIT /B 0
:Calc _file _Algorithm
SET "index=0"
FOR /F "delims=" %%a in ('certutil -hashfile %1 %2') do (
SET /A "index+=1"
IF !index!==2 SET hash=%%a&SET hash=!hash: =!
)
FOR %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do CALL SET hash=%%hash:%%i=%%i%%
ECHO.!hash_out_%2!%hash%
EXIT /B 0
:Show_file
ECHO.文件名称: %~nx1
SET fz0=%~z1
SET /A "fz1=fz0/1048576"
SET /A "fz2=(fz0-fz1*1048576+512)/1024"
IF %fz2% GEQ 100 SET fz=%fz1%.%fz2%&GOTO:fz_end
IF %fz2% GEQ 10 SET fz=%fz1%.0%fz2%&GOTO:fz_end
SET fz=%fz1%.00%fz2%&GOTO:fz_end
:fz_end
ECHO.文件大小: %fz% MB (%~z1 字节)
ECHO.修改时间: %~t1
IF %~z1==0 ECHO. 空白文件,不做计算!&ECHO.
EXIT /B 0
```
### 七、更新说明
#### 2020.04.18 发布 v1.4 最终版。
> 已支持直接将文件夹作为发送到计算校验值目标
> 功能为计算文件夹一级目录下所有文件哈希值。
> 不计算子文件夹
#### 2021.05.09 修复bug
>修复hash结果文件名中时间生成算法中的bug中有空格
>原来如果时间是上午10点前,时间中会有空格,进而产生bug。
>Lite版无影响
#### 不再更新,转用7-zip的Hash值文件生成菜单了。 本帖最后由 52ECHO 于 2021-10-14 08:54 编辑
TODO
v1.4
1、增加 将文件夹 发送到 文件校验值计算器 的支持。
效果为计算文件夹下所有文件的校验值,并将结果保存于文件夹下。
你们觉得仅文件夹下,还是文件夹的子文件夹下也一起递归进去算一遍?有点怕有人直接右键C盘(手动捂脸)
2020.04.15
TODO @2021.10.14
1、修改文件大小超过2GB是无法正确计算的bug
2、修改 hash值输出为 每个源文件名.hash.txt
win7 64 不计算哈希值:
文件名称: twrp-3.5.2_9-0-dipper.img
文件大小: 42.580 MB (44634112 字节)
修改时间: 2021-11-24 周三 09:48
MD2: A=A
MD4: A=A
MD5: A=A
SHA1: A=A
SHA256: A=A
SHA384: A=A
SHA512: A=A
沙发归我了 谢谢分享 不错,挺小的 是不是再次运行取消右键注册好一些:lol 不错,挺实用的,谢谢楼主分享。 lostlq 发表于 2021-4-15 15:23
是不是再次运行取消右键注册好一些
不是给了取消注册的脚本了么。一般不需要取消,所以单独提供了。 功能什么的很实用了 小巧方便 挺不错的呀