Get-FileHash
Berekent de hashwaarde voor een bestand met behulp van een opgegeven hash-algoritme.
Syntaxis
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-parameter Get-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 |
Geaccepteerde waarden: | SHA1, SHA256, SHA384, SHA512, MD5 |
Position: | 1 |
Default value: | SHA256 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-InputStream
Hiermee geeft u de invoerstroom.
Type: | Stream |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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[] |
Aliassen: | PSPath, LP |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | 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 |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | True |
Invoerwaarden
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.