Sdílet prostřednictvím


Get-FileHash

Vypočítá hodnotu hash souboru pomocí zadaného hashovacího algoritmu.

Syntaxe

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

Description

Rutina Get-FileHash vypočítá hodnotu hash souboru pomocí zadaného algoritmu hash. Hodnota hash je jedinečná hodnota, která odpovídá obsahu souboru. Místo identifikace obsahu souboru podle názvu souboru, přípony nebo jiného označení přiřadí hodnota hash k obsahu souboru jedinečnou hodnotu. Názvy souborů a přípony lze změnit beze změny obsahu souboru a beze změny hodnoty hash. Podobně lze obsah souboru změnit beze změny názvu nebo přípony. Změna i jednoho znaku v obsahu souboru ale změní hodnotu hash souboru.

Účelem hodnot hash je poskytnout kryptograficky bezpečný způsob, jak ověřit, že se obsah souboru nezměnil. I když některé hashovací algoritmy, včetně MD5 a SHA1, se už nepovažují za bezpečné proti útoku, cílem zabezpečeného hashovacího algoritmu je znemožnit změnu obsahu souboru – ať už omylem, nebo úmyslným nebo neoprávněným pokusem – a zachovat stejnou hodnotu hash. Hodnoty hash můžete použít také k určení, jestli mají dva různé soubory přesně stejný obsah. Pokud jsou hodnoty hash dvou souborů identické, obsah souborů je také stejný.

Ve výchozím nastavení používá rutina Get-FileHash algoritmus SHA256, i když je možné použít jakýkoli algoritmus hash podporovaný cílovým operačním systémem.

Příklady

Příklad 1: Výpočet hodnoty hash souboru

Tento příklad používá rutinu Get-FileHash k výpočtu hodnoty hash souboru /etc/apt/sources.list . Použitý algoritmus hash je výchozí algoritmus SHA256. Výstup se předá rutině Format-List , aby výstup naformátoval jako seznam.

Get-FileHash /etc/apt/sources.list | Format-List

Algorithm : SHA256
Hash      : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path      : /etc/apt/sources.list

Příklad 2: Výpočet hodnoty hash pro soubor ISO

Tento příklad používá rutinu Get-FileHash a algoritmus SHA384 k výpočtu hodnoty hash pro soubor ISO, který správce stáhl z internetu. Výstup se předá rutině Format-List , aby výstup naformátoval jako seznam.

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

Příklad 3: Výpočet hodnoty hash datového proudu

V tomto příkladu používáme System.Net.WebClient ke stažení balíčku ze stránky verze PowerShellu. Stránka verze také dokumentuje hodnotu hash SHA256 každého souboru balíčku. Publikovanou hodnotu hash můžeme porovnat s hodnotou, kterou vypočítáme Get-FileHashpomocí .

$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

Příklad 4: Výpočet hodnoty hash řetězce

PowerShell neposkytuje rutinu pro výpočet hodnoty hash řetězce. Můžete ale napsat řetězec do datového proudu a pomocí parametru Get-FileHash InputStream získat hodnotu hash.

$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

Parametry

-Algorithm

Určuje kryptografickou funkci hash, která se má použít pro výpočet hodnoty hash obsahu zadaného souboru nebo datového proudu. Kryptografická funkce hash má vlastnost, že je neproveditelná k vyhledání dvou různých souborů se stejnou hodnotou hash. Funkce hash se běžně používají s digitálními podpisy a pro integritu dat. Tento parametr přijímá tyto hodnoty:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Pokud není zadaná žádná hodnota nebo pokud parametr vynecháte, výchozí hodnota je SHA256.

Z bezpečnostních důvodů, MD5 a SHA1, které se už nepovažují za bezpečné, by se měly používat pouze pro jednoduché ověřování změn a neměly by se používat ke generování hodnot hash pro soubory, které vyžadují ochranu před útokem nebo manipulací.

Typ:String
Přípustné hodnoty:SHA1, SHA256, SHA384, SHA512, MD5
Position:1
Default value:SHA256
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputStream

Určuje vstupní datový proud.

Typ:Stream
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-LiteralPath

Určuje cestu k souboru. Na rozdíl od parametru Path se hodnota parametru LiteralPath používá přesně tak, jak je zadána. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete cestu do jednoduchých uvozovek. Jednoduché uvozovky dávají PowerShellu pokyn, aby neinterpretoval znaky jako řídicí sekvence.

Typ:String[]
Aliasy:PSPath, LP
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Path

Určuje cestu k jednomu nebo více souborům jako pole. Jsou povoleny zástupné znaky.

Typ:String[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:True

Vstupy

String

Do této rutiny můžete zamísit řetězec obsahující cestu k souboru.

Výstupy

Microsoft.PowerShell.Utility.FileHash

Tato rutina vrátí objekt představující cestu k zadanému souboru, hodnotu vypočítané hodnoty hash a algoritmus použitý k výpočtu hodnoty hash.