Get-FileHash

Berekent de hashwaarde voor een bestand met behulp van een opgegeven hash-algoritme.

Syntax

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

Description

De Get-FileHash cmdlet berekent de hashwaarde voor een bestand met behulp van een opgegeven hash-algoritme. Een hashwaarde is een unieke waarde die overeenkomt met de inhoud van het bestand. In plaats van de inhoud van een bestand te identificeren op basis van de bestandsnaam, extensie of andere aanduiding, wijst een hash een unieke waarde toe aan de inhoud van een bestand. Bestandsnamen en -extensies kunnen worden gewijzigd zonder de inhoud van het bestand te wijzigen en zonder de hashwaarde te wijzigen. Op dezelfde manier kan de inhoud van het bestand worden gewijzigd zonder de naam of extensie te wijzigen. Als u echter zelfs één teken wijzigt in de inhoud van een bestand, wordt de hashwaarde van het bestand gewijzigd.

Het doel van hashwaarden is om een cryptografisch veilige manier te bieden om te controleren of de inhoud van een bestand niet is gewijzigd. Hoewel sommige hash-algoritmen, waaronder MD5 en SHA1, niet langer als veilig worden beschouwd tegen aanvallen, is het doel van een beveiligd hash-algoritme om het onmogelijk te maken om de inhoud van een bestand te wijzigen - per ongeluk of door schadelijke of niet-geautoriseerde pogingen - en dezelfde hash-waarde te behouden. U kunt ook hashwaarden gebruiken om te bepalen of twee verschillende bestanden exact dezelfde inhoud hebben. Als de hashwaarden van twee bestanden identiek zijn, is de inhoud van de bestanden ook identiek.

De cmdlet maakt standaard Get-FileHash gebruik van het SHA256-algoritme, hoewel elk hash-algoritme dat wordt ondersteund door het doelbesturingssysteem kan worden gebruikt.

Voorbeelden

Voorbeeld 1: De hashwaarde berekenen voor een bestand

In dit voorbeeld wordt de Get-FileHash cmdlet gebruikt om de hash-waarde voor het /etc/apt/sources.list bestand te berekenen. Het gebruikte hash-algoritme is de standaard SHA256. De uitvoer wordt doorgesluisd naar de Format-List cmdlet om de uitvoer als een lijst op te maken.

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

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

Voorbeeld 2: De hashwaarde berekenen voor een ISO-bestand

In dit voorbeeld worden de Get-FileHash cmdlet en het SHA384-algoritme gebruikt om de hashwaarde te berekenen voor een ISO-bestand dat een beheerder van internet heeft gedownload. De uitvoer wordt doorgesluisd naar de Format-List cmdlet om de uitvoer als een lijst op te maken.

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

Voorbeeld 3: De hashwaarde van een stream berekenen

Voor dit voorbeeld gebruiken we System.Net.WebClient om een pakket te downloaden van de PowerShell-releasepagina. De releasepagina documenteren ook de SHA256-hash van elk pakketbestand. We kunnen de gepubliceerde hashwaarde vergelijken met de waarde waarmee we berekenen 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

Voorbeeld 4: De hash van een tekenreeks berekenen

PowerShell biedt geen cmdlet voor het berekenen van de hash van een tekenreeks. U kunt echter een tekenreeks naar een stream schrijven en de InputStream-parameterGet-FileHash gebruiken om de hash-waarde op te halen.

$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

Parameters

-Algorithm

Hiermee geeft u de cryptografische hash-functie op die moet worden gebruikt voor het berekenen van de hash-waarde van de inhoud van het opgegeven bestand of de opgegeven stream. Een cryptografische hash-functie heeft de eigenschap dat het niet haalbaar is om twee verschillende bestanden met dezelfde hash-waarde te vinden. Hash-functies worden vaak gebruikt met digitale handtekeningen en voor gegevensintegriteit. De aanvaardbare waarden voor deze parameter zijn:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Als er geen waarde is opgegeven of als de parameter wordt weggelaten, is de standaardwaarde SHA256.

Om veiligheidsredenen mogen MD5 en SHA1, die niet langer als veilig worden beschouwd, alleen worden gebruikt voor eenvoudige wijzigingsvalidatie en mogen ze niet worden gebruikt voor het genereren van hash-waarden voor bestanden die bescherming vereisen tegen aanvallen of manipulatie.

Type:String
Accepted values:SHA1, SHA256, SHA384, SHA512, MD5
Position:1
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputStream

Hiermee geeft u de invoerstroom.

Type:Stream
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Hiermee geeft u het pad naar een bestand. In tegenstelling tot de parameter Path wordt de waarde van de parameter LiteralPath exact gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het pad tussen enkele aanhalingstekens. Met enkele aanhalingstekens wordt PowerShell geïnstrueerd om tekens niet te interpreteren als escapereeksen.

Type:String[]
Aliases:PSPath, LP
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Hiermee geeft u het pad naar een of meer bestanden als een matrix. Jokertekens zijn toegestaan.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

Invoerwaarden

String

U kunt een tekenreeks met een pad naar een bestand doorsluisen naar deze cmdlet.

Uitvoerwaarden

Microsoft.PowerShell.Utility.FileHash

Deze cmdlet retourneert een object dat het pad naar het opgegeven bestand vertegenwoordigt, de waarde van de berekende hash en het algoritme dat wordt gebruikt om de hash te berekenen.