吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1987|回复: 7
收起左侧

[其他原创] 【批处理】基于坛友的java编写md5校验工具而写了个md5、sha1、sha256批处理工具

[复制链接]
hoochanlon 发表于 2023-7-21 22:25

提前策划

灵感来源:

想法:

设计/功能需求演化:

step1.  计算文件的md5、sha1、sha256

step2.  在第一步基础上拿到哈希值做两个文件的比较

step3. 复制一段哈希值比较下载文件(供应商提供的哈希值与网上下载的文件做比对)

源码与简单说明

附源码:https://github.com/hoochanlon/scripts/blob/main/d-bat/md5tools.bat

核心逻辑:

  1. 使用基础的工具命令,结合for /f "tokens=* delims=" 的整行处理,通过skip=1,跳过第一行取终端输出的第二行哈希值。
  2. 基于上述方法再进行一次for循环,求其他sha1、sha256的值,将所有的值存入变量后,跳出循环体,依次做比较。
  3. 在输入哈希值的比较与在计算文件哈希值的比较判断逻辑上:
    1. 如果每个哈希相同,输出;如果都不同,else 哈希值不匹配。(缺陷:测试情况三者全一致,仍会走else)
    2. 设置flag,使条件转向 set "match=false" 匹配则置true。(改善措施)
    3. set "match=false";if "%match%"=="false" (echo MD5、SHA1、SHA256哈希值全不匹配。) (具体行为/代码)
@%1 C:\Windows\SysWOW64\mshta.exe vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit & cd /d "%~dp0"

@echo off
setlocal
:menu
echo.
echo ***********************************************
echo MD5、SHA1、SHA256 哈希值计算、比较、校验工具
echo.
echo by https://github.com/hoochanlon
echo.
echo 选项
echo [1]. 计算文件 MD5、SHA1、SHA256 哈希值。
echo [2]. 比较文件 MD5、SHA1、SHA256 哈希值。
echo [3]. 校验文件 MD5、SHA1、SHA256 哈希值。
echo [4]. 刷新,并返回菜单。
echo.
echo ***********************************************
echo.
goto :select

:select
set /p choice=请输入选项数字:
set "match=false"

if "%choice%"=="1" (
    set /p filePath=请输入文件路径:
    call :calcHash "%filePath%"
    goto select
) else if "%choice%"=="2" (
    set /p filePath1=请输入第一个文件路径:
    set /p filePath2=请输入第二个文件路径:
    call :compareHash "%filePath1%" "%filePath2%"
    goto select
) else if "%choice%"=="3" (
    set /p hashcode=请输入哈希值:
    set /p filePathS=请输入文件路径:
    call :jiaoyanHash "%hashcode%" "%filePathS%"
    goto select
) else if "%choice%"=="4" (
    cls
    goto menu
) else (
    echo 无效的选项。
    goto menu
)
exit /b

:calcHash
rem 计算文件的 MD5、SHA1、SHA256 哈希值
for /f "skip=1 tokens=* delims=" %%a in ('certutil -hashfile %filePath% MD5') do (
    set "md5Hash=%%a"
    goto :calcMD5
)
:calcMD5
echo MD5 哈希值:%md5Hash%

for /f "skip=1 tokens=* delims=" %%a in ('certutil -hashfile %filePath% SHA1') do (
    set "sha1Hash=%%a"
    goto :calcSHA1
)
:calcSHA1
echo SHA1 哈希值:%sha1Hash%

for /f "skip=1 tokens=* delims=" %%a in ('certutil -hashfile %filePath% SHA256') do (
    set "sha256Hash=%%a"
    goto :calcSHA256
)
:calcSHA256
echo SHA256 哈希值:%sha256Hash%
echo.
exit /b

:compareHash
echo.
for /f "skip=1 tokens=* delims=" %%a in ('certutil -hashfile "%filePath1%" MD5') do (
    set "md5Hash1=%%a"
    for /f "skip=1 tokens=* delims=" %%b in ('certutil -hashfile "%filePath2%" MD5') do (
    set "md5Hash2=%%b"
        for /f "skip=1 tokens=* delims=" %%c in ('certutil -hashfile "%filePath1%" SHA1') do (
            set "sha1Hash1=%%c"
                    for /f "skip=1 tokens=* delims=" %%d in ('certutil -hashfile "%filePath2%" SHA1') do (
            set "sha1Hash2=%%d"
            for /f "skip=1 tokens=* delims=" %%e in ('certutil -hashfile "%filePath1%" SHA256') do (
                set "sha256Hash1=%%e"
                for /f "skip=1 tokens=* delims=" %%f in ('certutil -hashfile "%filePath2%" SHA256') do (
                set "sha256Hash2=%%f"
                goto :compareAllHash
                )
            )
            )
    )
    )
    )
    )
)

:compareAllHash
if "%md5Hash1%"=="%md5Hash2%" (
    echo.
    echo 两个文件的MD5哈希值相同
    echo %md5Hash1%
    echo %md5Hash2%
    set "match=true"
) else (
    echo.
    echo 两个文件的MD5哈希值不同
    echo %md5Hash1%
    echo %md5Hash2%
)

if "%sha1Hash1%"=="%sha1Hash2%" (
    echo.
    echo 两个文件的SHA1哈希值相同
    echo %sha1Hash1%
    echo %sha1Hash2%
    set "match=true"
) else (
    echo.
    echo 两个文件的SHA1哈希值不同
    echo %sha1Hash1%
    echo %sha1Hash2%
)

if "%sha256Hash1%"=="%sha256Hash2%" (
    echo.
    echo 两个文件的SHA256哈希值相同
    echo %sha256Hash1%
    echo %sha256Hash2%
    set "match=true"
    echo.
) else (
    echo.
    echo 两个文件的SHA256哈希值不同
    echo %sha256Hash1%
    echo %sha256Hash2%
    echo.
)

:jiaoyanHash
echo.
for /f "skip=1 tokens=* delims=" %%g in ('certutil -hashfile "%filePathS%" MD5') do (
    set "jy_md5Hash=%%g"
        for /f "skip=1 tokens=* delims=" %%h in ('certutil -hashfile "%filePathS%" SHA1') do (
            set "jy_sha1Hash=%%h"
            for /f "skip=1 tokens=* delims=" %%i in ('certutil -hashfile "%filePathS%" SHA256') do (
                set "jy_sha256Hash=%%i"
                goto :jiaoyanAllHash
                )
            )
         )
    )
)

:jiaoyanAllHash
if "%jy_md5Hash%"=="%hashcode%" (
    echo 文件的MD5哈希值相同
    echo %jy_md5Hash%
    echo %hashcode%
    echo.
    set "match=true"
)
if "%jy_sha1Hash%"=="%hashcode%" (
    echo 文件的SHA1哈希值相同
    echo %jy_sha1Hash%
    echo %hashcode%
    echo.
    set "match=true"
)
if "%jy_sha256Hash%"=="%hashcode%" (
    echo 文件的SHA256哈希值相同
    echo %jy_sha256Hash%
    echo %hashcode%
    echo.
    set "match=true"
)

if "%match%"=="false" (
    echo MD5、SHA1、SHA256哈希值全不匹配。
    echo.
)

效果

本地测试图例1

catch2023-07-21 20.11.49

在线远程调用测试

curl -OfsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/scripts/main/d-bat/md5tools.bat&&call md5tools.bat

catch2023-07-21 20.26.26

功能1

catch2023-07-21 20.26.59

功能2

catch2023-07-21 20.27.23

功能3

catch2023-07-21 20.28.23

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kong1988 发表于 2023-7-22 08:51
必须赞一个
waishr 发表于 2023-7-22 10:13
taotao1997 发表于 2023-7-23 13:02
Thor666 发表于 2023-7-23 15:40
感谢楼主分享
faifi 发表于 2023-12-14 01:30
大佬,哈希值没有做大小写转换吗?
赖炳君66 发表于 2024-5-22 00:07
楼主,能改webm视频格式的吗
会放电的皮卡丘 发表于 2024-5-27 11:00
谢谢分享,正好需要
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表