Udostępnij za pośrednictwem


Get-FileHash

Oblicza wartość skrótu dla pliku przy użyciu określonego algorytmu skrótu.

Składnia

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

Opis

Polecenie cmdlet Get-FileHash oblicza wartość skrótu dla pliku przy użyciu określonego algorytmu skrótu. Wartość skrótu to unikatowa wartość odpowiadająca zawartości pliku. Zamiast identyfikować zawartość pliku według nazwy pliku, rozszerzenia lub innego oznaczenia, skrót przypisuje unikatową wartość do zawartości pliku. Nazwy plików i rozszerzenia można zmienić bez zmiany zawartości pliku i bez zmiany wartości skrótu. Podobnie zawartość pliku można zmienić bez zmiany nazwy lub rozszerzenia. Jednak zmiana nawet pojedynczego znaku w zawartości pliku zmienia wartość skrótu pliku.

Celem wartości skrótu jest zapewnienie kryptograficznie bezpiecznego sposobu sprawdzania, czy zawartość pliku nie została zmieniona. Chociaż niektóre algorytmy wyznaczania wartości skrótu, w tym MD5 i SHA1, nie są już uważane za bezpieczne przed atakiem, celem bezpiecznego algorytmu wyznaczania wartości skrótu jest uniemożliwienie zmiany zawartości pliku — przez przypadek lub przez złośliwą lub nieautoryzowaną próbę — i zachowanie tej samej wartości skrótu. Możesz również użyć wartości skrótu, aby określić, czy dwa różne pliki mają dokładnie tę samą zawartość. Jeśli wartości skrótu dwóch plików są identyczne, zawartość plików jest również taka sama.

Domyślnie polecenie cmdlet Get-FileHash używa algorytmu SHA256, chociaż można użyć dowolnego algorytmu wyznaczania wartości skrótu obsługiwanego przez docelowy system operacyjny.

Przykłady

Przykład 1. Obliczanie wartości skrótu dla pliku

W tym przykładzie użyto polecenia cmdlet Get-FileHash do obliczenia wartości skrótu dla pliku /etc/apt/sources.list. Używany algorytm wyznaczania wartości skrótu to domyślna SHA256. Dane wyjściowe są przesyłane potokiem do polecenia cmdlet Format-List w celu sformatowania danych wyjściowych jako listy.

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

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

Przykład 2. Obliczanie wartości skrótu dla pliku ISO

W tym przykładzie użyto polecenia cmdlet Get-FileHash i algorytmu SHA384 do obliczenia wartości skrótu dla pliku ISO pobranego przez administratora z Internetu. Dane wyjściowe są przesyłane potokiem do polecenia cmdlet Format-List w celu sformatowania danych wyjściowych jako listy.

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

Przykład 3. Obliczanie wartości skrótu strumienia

W tym przykładzie używamy System.Net.WebClient do pobrania pakietu ze strony wydania programu PowerShell. Strona wydania dokumentuje również skrót SHA256 każdego pliku pakietu. Możemy porównać opublikowaną wartość skrótu z wartością obliczoną przy użyciu 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

Przykład 4. Obliczanie skrótu ciągu

Program PowerShell nie udostępnia polecenia cmdlet do obliczenia skrótu ciągu. Można jednak napisać ciąg do strumienia i użyć parametru InputStreamGet-FileHash, aby uzyskać wartość skrótu.

$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

Określa funkcję skrótu kryptograficznego, która ma być używana do obliczania wartości skrótu zawartości określonego pliku lub strumienia. Funkcja skrótu kryptograficznego ma właściwość, którą można znaleźć w dwóch różnych plikach o tej samej wartości skrótu. Funkcje skrótu są często używane z podpisami cyfrowymi i integralnością danych. Dopuszczalne wartości tego parametru to:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Jeśli nie określono żadnej wartości lub jeśli parametr zostanie pominięty, wartość domyślna to SHA256.

Ze względów bezpieczeństwa, MD5 i SHA1, które nie są już uważane za bezpieczne, powinny być używane tylko do prostej weryfikacji zmian i nie należy ich używać do generowania wartości skrótu dla plików wymagających ochrony przed atakiem lub manipulowaniem.

Typ:String
Dopuszczalne wartości:SHA1, SHA256, SHA384, SHA512, MD5
Position:1
Domyślna wartość:SHA256
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-InputStream

Określa strumień wejściowy.

Typ:Stream
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-LiteralPath

Określa ścieżkę do pliku. W przeciwieństwie do parametru Path wartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ścieżkę w pojedynczy cudzysłów. Znaki pojedynczego cudzysłowu instruują program PowerShell, aby nie interpretował znaków jako sekwencji ucieczki.

Typ:String[]
Aliasy:PSPath, LP
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-Path

Określa ścieżkę do co najmniej jednego pliku jako tablicy. Dozwolone są symbole wieloznaczne.

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

Dane wejściowe

String

Możesz przekazać ciąg zawierający ścieżkę do pliku do tego polecenia cmdlet.

Dane wyjściowe

Microsoft.PowerShell.Utility.FileHash

To polecenie cmdlet zwraca obiekt reprezentujący ścieżkę do określonego pliku, wartość obliczonego skrótu i algorytm używany do obliczenia skrótu.