다음을 통해 공유


Get-FileHash

지정한 해시 알고리즘을 사용하여 파일에 대한 해시 값을 계산합니다.

구문

Get-FileHash
   [-Path] <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -LiteralPath <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -InputStream <Stream>
   [-Algorithm <String>]
   [<CommonParameters>]

Description

cmdlet은 Get-FileHash 지정된 해시 알고리즘을 사용하여 파일의 해시 값을 계산합니다. 해시 값은 파일 내용에 해당하는 고유한 값입니다. 해시는 파일 이름, 확장명 또는 기타 지정으로 파일의 내용을 식별하는 대신 파일 내용에 고유한 값을 할당합니다. 파일의 내용을 변경하지 않고 해시 값을 변경하지 않고 파일 이름과 확장명을 변경할 수 있습니다. 마찬가지로 파일의 콘텐츠는 이름이나 확장명을 변경하지 않고 변경할 수 있습니다. 그러나 파일 내용에서 한 문자라도 변경하면 파일의 해시 값이 변경됩니다.

해시 값은 파일 내용이 변경되지 않았음을 확인하는 암호화된 보안 방법을 제공합니다. MD5 및 SHA1을 비롯한 일부 해시 알고리즘은 더 이상 공격로부터 안전한 것으로 간주되지 않지만 보안 해시 알고리즘의 목표는 실수로 또는 악의적이거나 무단으로 파일의 내용을 변경할 수 없도록 렌더링하고 동일한 해시 값을 유지하는 것입니다. 해시 값을 사용하여 서로 다른 두 파일에 정확히 동일한 콘텐츠가 있는지 확인할 수도 있습니다. 두 파일의 해시 값이 같으면 파일 내용도 같습니다.

기본적으로 cmdlet은 Get-FileHash SHA256 알고리즘을 사용하지만 대상 운영 체제에서 지원하는 해시 알고리즘은 사용할 수 있습니다.

예제

예제 1: 파일의 해시 값 계산

이 예제에서는 Get-FileHash cmdlet을 사용하여 파일의 해시 값을 계산합니다 Powershell.exe . 사용되는 해시 알고리즘은 기본 SHA256입니다. 출력은 cmdlet에 Format-List 파이프되어 출력의 형식을 목록으로 지정합니다.

Get-FileHash $PSHOME\powershell.exe | Format-List

Algorithm : SHA256
Hash      : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

예제 2: ISO 파일의 해시 값 계산

이 예제에서는 cmdlet 및 SHA384 알고리즘을 사용하여 Get-FileHash 관리자가 인터넷에서 다운로드한 ISO 파일의 해시 값을 계산합니다. 출력은 cmdlet에 Format-List 파이프되어 출력의 형식을 목록으로 지정합니다.

Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List

Algorithm : SHA384
Hash      : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path      : C:\Users\user1\Downloads\Contoso8_1_ENT.iso

예제 3: 스트림의 해시 값 계산

이 예제에서는 System.Net.WebClient를 사용하여 Powershell 릴리스 페이지에서 패키지를 다운로드합니다. 릴리스 페이지에서는 각 패키지 파일의 SHA256 해시도 문서화합니다. 게시된 해시 값을 계산한 해시 값과 비교할 수 있습니다 Get-FileHash.

$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash

True

예제 4: 문자열의 해시 계산

PowerShell은 문자열의 해시를 계산하는 cmdlet을 제공하지 않습니다. 그러나 스트림에 문자열을 작성하고 InputStream 매개 변수 Get-FileHash사용하여 해시 값을 가져올 수 있습니다.

$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash

Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C

매개 변수

-Algorithm

지정된 파일 또는 스트림의 콘텐츠의 해시 값을 계산하는 데 사용할 암호화 해시 함수를 지정합니다. 암호화 해시 함수에는 동일한 해시 값을 가진 두 개의 다른 파일을 찾을 수 없는 속성이 있습니다. 해시 함수는 일반적으로 디지털 서명 및 데이터 무결성에 사용됩니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MACTripleDES
  • MD5
  • RIPEMD160

값을 지정하지 않거나 매개 변수를 생략할 경우 기본값은 SHA256입니다.

보안상, 더 이상 안전하지 않은 MD5 및 SHA1은 간단한 변경 유효성 검사에만 사용해야 하며 공격이나 조작으로부터 보호해야 하는 파일의 해시 값을 생성하는 데 사용하면 안 됩니다.

형식:String
허용되는 값:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Position:Named
Default value:SHA256
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-InputStream

입력 스트림을 지정합니다.

형식:Stream
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-LiteralPath

파일의 경로를 지정합니다. Path 매개 변수와 달리 LiteralPath 매개 변수의 값은 입력된 대로 정확하게 사용됩니다. 와일드카드 문자로 해석되는 문자는 없습니다. 경로에 이스케이프 문자가 포함된 경우 경로를 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

형식:String[]
별칭:PSPath
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Path

하나 이상의 파일에 대한 경로를 배열로 지정합니다. 와일드카드 문자를 사용할 수 있습니다.

형식:String[]
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:True

입력

String

파일 경로가 포함된 문자열을 이 cmdlet으로 파이프할 수 있습니다.

출력

Microsoft.PowerShell.Utility.FileHash

이 cmdlet은 지정된 파일의 경로, 계산된 해시의 값 및 해시를 계산하는 데 사용되는 알고리즘을 나타내는 개체를 반환합니다.