52ECHO 发表于 2021-4-15 14:20

(不再更新)文件校验值计算器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-4-15 14:24

本帖最后由 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

staty 发表于 2021-11-24 09:59

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

mnbjkl1024 发表于 2021-4-15 14:23

沙发归我了

L__ 发表于 2021-4-15 14:37

谢谢分享

碎步流年 发表于 2021-4-15 14:49

不错,挺小的

lostlq 发表于 2021-4-15 15:23

是不是再次运行取消右键注册好一些:lol

leskady 发表于 2021-4-15 16:12

不错,挺实用的,谢谢楼主分享。

52ECHO 发表于 2021-4-15 18:34

lostlq 发表于 2021-4-15 15:23
是不是再次运行取消右键注册好一些

不是给了取消注册的脚本了么。一般不需要取消,所以单独提供了。

第一品霄 发表于 2021-4-16 00:05

功能什么的很实用了

atrago 发表于 2021-4-17 08:21

小巧方便 挺不错的呀
页: [1] 2 3
查看完整版本: (不再更新)文件校验值计算器v1.4.1_Final(一个4KB不到的文件哈希值计算工具)