是否有一种无需使用临时文件就可以散列命令输出的方法?

问题描述 投票:0回答:1

在命令提示符下,您可以使用certutil -hashfile <filepath> <hash algorithm>查看md5或文件的其他哈希。这是我无需重新加密即可检索文件哈希值的唯一选择。我的问题是是否有一种对句子或命令输出进行哈希处理的方法?

[我要弄清楚的是,是否可能有一种特定的命令可以在以下情况下使用:set /p "var=input something" && <hash command> %var%或将certutil -hashfile%var%一起使用而不是文件,而不必使用@echo %var% > temp.txt?我可以使用的函数也将被接受,但我特别希望使用一种无​​需使用临时文件即可对事物进行哈希处理的方法。


总而言之,我希望能够能够在不使用临时文件的情况下在任何算法(尤其是md5)中进行哈希处理,并将其存储在变量中。

EDIT

:具体来说,我想做一个新的想法来制作一个受密码保护的批处理文件,而不是仅仅通过查看批处理文件的代码就能真正轻松地找到密码。 ,例如,我可以输入我想要的密码的md5哈希值,这样就很难“破解”到文件中(说起来容易)。这样,我可以仅散列用户的输入,然后查看它是否与散列的实际密码相同。

我可以使用以下临时文件来完成所需的内容:

@echo off
set /p var="Input the password to this file: "
@echo %var% > temp.txt
certutil -hashfile "%~dp0\temp.txt" > temp.txt
findstr /X <hash> || goto :eof 

在命令提示符下,您可以使用certutil -hashfile 查看文件的md5或其他哈希。这是检索文件哈希值的唯一选择...

batch-file cmd hash
1个回答
0
投票
@echo off
setlocal

rem Get hash as password.
set /p "reply=Input the password to this file: " || exit /b 0

rem Get hash of the file.
set "hash="

for /f "skip=1 delims=" %%A in (
    'certutil -hashfile "%~f0"'
) do if not defined hash set "hash=%%A"

rem Remove spaces from hash.
if defined hash (
    set "hash=%hash: =%"
)

rem Check the hash with the input.
echo(%hash%

if /i "%reply%" == "%hash%" (
    echo Input Passed.
) else (
    echo Input failed.
)

certutil可以将散列输出到stdout,可以使用for /f循环将其设置为变量。第二行是哈希,因此请使用for /f选项skip=1跳过第一行,并希望整行,因此请使用选项delims=

© www.soinside.com 2019 - 2024. All rights reserved.