在命令提示符下,您可以使用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
@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=
。