Windows 명령줄에서 STRING의 SHA256 해시 생성

Windows 명령줄에서 STRING의 SHA256 해시 생성

*nix 세계에서는 이것이 간단하지만 SHA256 해시를 생성하는 솔루션을 생각해낼 수 없습니다.타사 애플리케이션이나 배치 파일을 설치하지 않고 Windows 명령 셸(PowerShell 아님)에서

CertUtil은 파일의 해시를 생성하는 데는 잘 작동하지만 일부 개발자가 다른 곳에서 사용할 수 있도록 복사/붙여넣기가 가능한 일반 문자열의 해시를 원합니다.

Mac에서와 같이 Windows에서 작동하는 것을 찾고 있습니다.

echo -n "foobar" | shasum -a 256

그러면 "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2"라는 해시가 생성됩니다.

어떤 도움이라도 주시면 감사하겠습니다. 저는 Mac 사용자이고 개발자를 위해 몇 가지 문서를 작성하려고 노력 중입니다. 그 중 일부는 Windows를 사용합니다.

답변1

Windows 배치/cmd 스크립트

그만큼certutil파이프로부터의 입력을 지원하지 않지만,

certutil [options] -hashfile infile [hashalgorithm] 

따라서 임시 파일이 필요합니다.

이 Windows cmd 스크립트는 문자열을 인수로 사용하고 SHA-256 해시를 반환합니다.

@echo off
if [%1]==[] goto usage

set STRING="%*"
set TMPFILE="%TMP%\hash-%RANDOM%.tmp"
echo | set /p=%STRING% > %TMPFILE%
certutil -hashfile %TMPFILE% SHA256 | findstr /v "hash"
del %TMPFILE%
goto :eof

:usage
echo Usage: %0 string to be hashed

이 스크립트의 이름은 다음과 같습니다 sha256sum.cmd.

C:\>sha256sum.cmd
Usage: sha256sum.cmd string to be hashed

C:\>sha256sum.cmd foobar
c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2

C:\>sha256sum.cmd foo bar
fbc1a9f858ea9e177916964bd88c3d37b91a1e84412765e29950777f265c4b75

이는 다음과 동일한 해시입니다 sha256sum.

$ echo -n "foobar" | sha256sum
c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2  -
$ echo -n "foo bar" | sha256sum
fbc1a9f858ea9e177916964bd88c3d37b91a1e84412765e29950777f265c4b75  -

파워셸

그만큼Get-FileHashcmdlet지원하다입력 스트림임시 파일을 대체할 수 있습니다.

를 기반으로예시 4PowerShell에서 이전 cmd 스크립트를 다시 만들 수 있습니다.

if($args.Count -eq 0) {
  Write-Host "Usage: .\$($MyInvocation.MyCommand.Name) string to be hashed";
  exit 1
}

$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("$args")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -Algorithm SHA256 -InputStream $stringAsStream `
  | Select-Object Hash `
  | ForEach-Object {$_.Hash}

이 스크립트의 이름은 다음과 같습니다 sha256sum.ps1.

PS C:\> .\sha256sum.ps1
Usage: .\sha256sum.ps1 string to be hashed

PS C:\> .\sha256sum.ps1 foobar
C3AB8FF13720E8AD9047DD39466B3C8974E592C2FA383D4A3960714CAEF0C4F2

PS C:\> .\sha256sum.ps1 foo bar
FBC1A9F858EA9E177916964BD88C3D37B91A1E84412765E29950777F265C4B75

답변2

OP는 배치 파일을 "실행"할 필요가 없는 한 줄짜리를 요청했기 때문에 여기에 @GeraldSchneider의 의견에서 파생된 한 줄짜리가 있습니다.이 답변:

echo|set /p="foobar" > %TMP%/hash.txt |certutil -hashfile %TMP%/hash.txt SHA256 | findstr /v "hash"

관련 정보