Ich möchte eine MD5- Prüfsumme für einige Inhalte berechnen . Wie mache ich das in PowerShell?
powershell
powershell-2.0
Luke101
quelle
quelle
Antworten:
Wenn der Inhalt eine Zeichenfolge ist:
Wenn der Inhalt eine Datei ist:
Ab PowerShell Version 4 ist dies mit dem
Get-FileHash
Cmdlet für Dateien sofort möglich:Dies ist sicherlich vorzuziehen, da dadurch die Probleme vermieden werden, die die erste Lösung bietet, wie in den Kommentaren angegeben (verwendet einen Stream, schließt ihn und unterstützt große Dateien).
quelle
Exception calling "ReadAllBytes" with "1" argument(s): "The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size."
Als Linux-Neuling bei Powershell ärgere ich mich sehr über die Schwierigkeiten, die ich habe, wenn ich eine MD5-Summe bekomme, die einfachmd5sum file.ext
unter Linux wäre.$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::Open("$someFilePath",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)))
Dies gibt Ihnen eine geringe Speichernutzung und keine Beschränkung auf 2 GB .$stream = [System.IO.File]::Open("$someFilePath",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
dann$hash = [System.BitConverter]::ToString($md5.ComputeHash($stream))
dann$stream.Close()
Wenn Sie die PowerShell-Community-Erweiterungen verwenden, gibt es ein Get-Hash-Commandlet, das dies auf einfache Weise erledigt:
quelle
Get-FileHash
in Vanilla PowerShell 4.0 hinzugefügt . Vide TechNet .Hier sind die beiden Zeilen, ändern Sie einfach "Hallo" in Zeile 2:
quelle
Hier ist eine Funktion, die relative und absolute Pfade verarbeitet:
Vielen Dank an @davor oben für den Vorschlag, Open () anstelle von ReadAllBytes () zu verwenden, und an @ jpmc26 für den Vorschlag, einen finally-Block zu verwenden.
quelle
Dispose
Anruf sollte in einemfinally
Block sein.Ein weiterer integrierter Befehl, der seit 2003 standardmäßig in Windows installiert ist , ist Certutil , das natürlich auch von PowerShell aus aufgerufen werden kann.
(Vorsichtsmaßnahme: MD5 sollte für maximale Robustheit in allen Kappen enthalten sein.)
quelle
FipsAlgorithmPolicy
aktiviert ist.Es gibt viele Beispiele online mit ComputeHash (). Meine Tests haben gezeigt, dass dies beim Ausführen über eine Netzwerkverbindung sehr langsam war. Das folgende Snippet läuft für mich viel schneller, Ihr Kilometerstand kann jedoch variieren:
quelle
write-progress
Leitung? Der Syntax-Textmarker scheint es nicht zu mögen.Diese Site enthält ein Beispiel: Verwenden von Powershell für MD5-Prüfsummen . Es verwendet das .NET-Framework, um eine Instanz des MD5-Hash-Algorithmus zu instanziieren und den Hash zu berechnen.
Hier ist der Code aus dem Artikel, der Stephens Kommentar enthält:
quelle
Wie in der akzeptierten Antwort angegeben,
Get-FileHash
ist die Verwendung mit Dateien einfach, es ist jedoch auch möglich, sie mit Zeichenfolgen zu verwenden:quelle
Es gibt jetzt eine Get-FileHash-Funktion, die sehr praktisch ist.
Wechseln Sie einfach
SHA384
zuMD5
.Das Beispiel stammt aus der offiziellen Dokumentation von PowerShell 5.1 . Die Dokumentation enthält weitere Beispiele.
quelle
Dies wird zu einem Einzeiler, wenn Sie File Checksum Integrity Verifier (FCIV) von Microsoft herunterladen.
Ich habe FCIV von hier heruntergeladen: Verfügbarkeit und Beschreibung des Dienstprogramms File Checksum Integrity Verifier
Führen Sie den folgenden Befehl aus. Ich musste zehn Dateien überprüfen.
quelle
Dadurch wird ein MD5-Hash für eine Datei auf einem Remotecomputer zurückgegeben:
quelle
Beispiel für eine Rechtsklick-Menüoption:
quelle
PowerShell One-Liner (String zu Hash)
MD5
SHA1
SHA256
SHA384
SHA512
quelle
Hier ist ein hübsches Druckbeispiel, das versucht, den SHA256-Fingerabdruck zu überprüfen. Ich habe gpg4win v3.0.3 mit PowerShell v4 heruntergeladen (erforderlich
Get-FileHash
).Laden Sie das Paket von https://www.gpg4win.org/download.html herunter , öffnen Sie PowerShell, holen Sie sich den Hash von der Download-Seite und führen Sie Folgendes aus:
Ausgabe:
quelle
Hier ist ein einzeiliges Befehlsbeispiel, bei dem sowohl die richtige Prüfsumme der Datei , wie Sie sie gerade heruntergeladen haben, berechnet als auch mit der veröffentlichten Prüfsumme des Originals verglichen wird.
Zum Beispiel habe ich ein Beispiel für Downloads aus dem Apache JMeter-Projekt geschrieben . In diesem Fall haben Sie:
Mit diesem PowerShell-Befehl können Sie dann die Integrität der heruntergeladenen Datei überprüfen:
Ausgabe:
Erläuterung:
Der erste Operand des
-eq
Operators ergibt sich aus der Berechnung der Prüfsumme für die Datei:Der zweite Operand ist der veröffentlichte Prüfsummenwert. Wir erhalten zuerst den Inhalt der Datei.md5, bei der es sich um eine Zeichenfolge handelt, und extrahieren dann den Hashwert basierend auf dem Zeichenfolgenformat:
Sowohl file als auch file.md5 müssen sich für diese Befehlsarbeit im selben Ordner befinden.
quelle
Folgendes verwende ich, um einen konsistenten Hashwert zu erhalten:
quelle
Hier ist das Snippet, mit dem ich das MD5 für eine bestimmte Zeichenfolge erhalte:
quelle