Wenn man nun einen vorgegebenen Hash hat, jedoch nicht weiß, mit welchem Algorithmus dieser erzeugt wurde, kann man mit dem folgenden Code eine Datei gegen alle verfügbaren Algorithmen prüfen und muss den Befehl nicht für jeden Algorithmus einzeln ausführen:
$Datei = “C:\Pfad\CSRs.zip” #Pfad zur Datei
$Hash = “86B6AFE6FB39089635B41D251058D288B921F71E” #vorgegebener Hash, gegen den später die Hashes aus dem CMDlet berechnet und geprüft werden sollen
$Algorithmen = (Get-Command Get-FileHash).Parameters.Values | Where-Object {$_.name -eq “Algorithm”} | Select-Object -ExpandProperty Attributes | Select-Object ValidValues | Select-Object -ExpandProperty ValidValues
$HashCounterFailed = 0
if(Test-Path -Path $Datei){
foreach($Algorithmus in $Algorithmen){
$CurrentHash = (Get-FileHash -Path $Datei -Algorithm “$Algorithmus” | Select-Object -Property Algorithm,Hash)
if($CurrentHash.Hash -contains $Hash){
Write-Host “Übereinstimmung des vorgegebenen Hashes mit Algorithmus $($CurrentHash.Algorithm)”
}else{
$HashCounterFailed += 1
}
}
if($HashCounterFailed -eq $Algorithmen.Count){
Write-Host “Der vorgegebene Hash stimmt mit keinem verfügbaren Algorithmus überein”
}
}else{
Write-Host “Der Pfad zur Datei ist ungültig.”
}
Hin und wieder muss man Dateien für die Integritätsprüfung gegen gängige Hashes prüfen.
Dies kennt man bspw. von Dateien auf Websiten, die zum Download angeboten werden. Hier wird ein Hash mitgegeben, mit dem man nach dem Herunterladen der Datei sicherstellen kann, dass diese nicht auf dem Weg verfälscht wurde, wie es bei Man in the middle Angriffen gemacht wird.
In PowerShell kann man diese Prüfung mit dem CMDlet Get-Filehash durchführen.
Hierzu stellt das CMDlet folgende Hashalgorithmen zur Verfügung:
Wenn man nun einen vorgegebenen Hash hat, jedoch nicht weiß, mit welchem Algorithmus dieser erzeugt wurde, kann man mit dem folgenden Code eine Datei gegen alle verfügbaren Algorithmen prüfen und muss den Befehl nicht für jeden Algorithmus einzeln ausführen:
$Datei = “C:\Pfad\CSRs.zip” #Pfad zur Datei
$Hash = “86B6AFE6FB39089635B41D251058D288B921F71E” #vorgegebener Hash, gegen den später die Hashes aus dem CMDlet berechnet und geprüft werden sollen
$Algorithmen = (Get-Command Get-FileHash).Parameters.Values | Where-Object {$_.name -eq “Algorithm”} | Select-Object -ExpandProperty Attributes | Select-Object ValidValues | Select-Object -ExpandProperty ValidValues
$HashCounterFailed = 0
if(Test-Path -Path $Datei){
foreach($Algorithmus in $Algorithmen){
$CurrentHash = (Get-FileHash -Path $Datei -Algorithm “$Algorithmus” | Select-Object -Property Algorithm,Hash)
if($CurrentHash.Hash -contains $Hash){
Write-Host “Übereinstimmung des vorgegebenen Hashes mit Algorithmus $($CurrentHash.Algorithm)”
}else{
$HashCounterFailed += 1
}
}
if($HashCounterFailed -eq $Algorithmen.Count){
Write-Host “Der vorgegebene Hash stimmt mit keinem verfügbaren Algorithmus überein”
}
}else{
Write-Host “Der Pfad zur Datei ist ungültig.”
}