Chciałbym obliczyć sumę kontrolną MD5 jakiejś treści. Jak to zrobić w PowerShell?
powershell
powershell-2.0
Łukasza 101
źródło
źródło
Odpowiedzi:
Jeśli treść jest ciągiem:
Jeśli zawartość jest plikiem:
Począwszy od wersji PowerShell 4, można to łatwo zrobić dla plików po wyjęciu z pudełka za pomocą polecenia
Get-FileHash
cmdlet:Jest to z pewnością lepsze, ponieważ pozwala uniknąć problemów, które oferuje pierwsze rozwiązanie, jak określono w komentarzach (używa strumienia, zamyka go i obsługuje duże pliki).
źródło
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."
Jako użytkownik Linuksa nowy w Powershell, jestem bardzo zirytowany problemami, jakie mam z uzyskaniem sumy md5, która byłaby po prostumd5sum file.ext
na Linuksie.$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::Open("$someFilePath",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)))
zapewnia to niskie zużycie pamięci i brak limitu 2 GB .$stream = [System.IO.File]::Open("$someFilePath",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
Następnie$hash = [System.BitConverter]::ToString($md5.ComputeHash($stream))
następnie$stream.Close()
Jeśli używasz rozszerzeń społeczności PowerShell, istnieje polecenie Get-Hash, które zrobi to łatwo:
źródło
Get-FileHash
w waniliowym PowerShell 4.0. Vide TechNet .Oto dwie linie, po prostu zmień „cześć” w linii nr 2:
źródło
Oto funkcja, której używam, która obsługuje ścieżki względne i bezwzględne:
Podziękowania dla @davor powyżej za sugestię użycia Open () zamiast ReadAllBytes () oraz dla @ jpmc26 za sugestię użycia końcowego bloku.
źródło
Dispose
Połączenie powinno być wfinally
bloku.Innym wbudowanym poleceniem, które od dawna jest domyślnie instalowane w systemie Windows od 2003 r., Jest Certutil , który oczywiście można również wywołać z PowerShell.
(Uwaga: MD5 powinien być we wszystkich zakrętkach, aby zapewnić maksymalną wytrzymałość)
źródło
FipsAlgorithmPolicy
jest włączona.Istnieje wiele przykładów online wykorzystujących ComputeHash (). Moje testy wykazały, że działało to bardzo wolno, gdy działało przez połączenie sieciowe. Poniższy fragment kodu działa znacznie szybciej, ale Twój przebieg może się różnić:
źródło
write-progress
linii? Podświetlaczowi składni chyba się to nie podoba.W tej witrynie znajduje się przykład: Używanie programu PowerShell dla sum kontrolnych MD5 . Używa platformy .NET do utworzenia wystąpienia algorytmu wyznaczania wartości skrótu MD5 w celu obliczenia wartości skrótu.
Oto kod z artykułu, zawierający komentarz Stephena:
źródło
Jak stwierdzono w przyjętej odpowiedzi,
Get-FileHash
jest łatwy w użyciu z plikami, ale można go również używać z ciągami:źródło
Jest teraz bardzo przydatna funkcja Get-FileHash.
Po prostu zmień
SHA384
naMD5
.Przykład pochodzi z oficjalnej dokumentacji programu PowerShell 5.1 . Dokumentacja zawiera więcej przykładów.
źródło
Staje się to jednolinijkowe, jeśli pobierzesz narzędzie File Checksum Integrity Verifier (FCIV) z firmy Microsoft.
Pobrałem FCIV stąd: Dostępność i opis narzędzia File Checksum Integrity Verifier
Uruchom następujące polecenie. Miałem dziesięć plików do sprawdzenia.
źródło
Jednoliniowe PowerShell (ciąg do skrótu)
MD5
SHA1
SHA256
SHA384
SHA512
źródło
Spowoduje to zwrócenie skrótu MD5 dla pliku na komputerze zdalnym:
źródło
Przykład również dla opcji menu prawego przycisku myszy:
źródło
Oto ładny przykład wydruku próbujący zweryfikować odcisk palca SHA256. Pobrałem gpg4win v3.0.3 przy użyciu PowerShell v4 (wymaga
Get-FileHash
).Pobierz pakiet z https://www.gpg4win.org/download.html , otwórz PowerShell, pobierz hash ze strony pobierania i uruchom:
Wynik:
źródło
Oto przykład jednego wiersza polecenia, w którym oba obliczają odpowiednią sumę kontrolną pliku , tak jak właśnie pobrałeś, i porównujesz ją z opublikowaną sumą kontrolną oryginału.
Na przykład napisałem przykład do pobrania z projektu Apache JMeter . W tym przypadku masz:
Następnie za pomocą tego polecenia PowerShell możesz zweryfikować integralność pobranego pliku:
Wynik:
Wyjaśnienie:
Pierwszy operand
-eq
operatora jest wynikiem obliczenia sumy kontrolnej pliku:Drugi operand to opublikowana wartość sumy kontrolnej. Najpierw pobieramy zawartość pliku.md5, który jest jednym ciągiem, a następnie wyodrębniamy wartość skrótu na podstawie formatu ciągu:
Aby to polecenie działało, zarówno plik, jak i plik.md5 muszą znajdować się w tym samym folderze.
źródło
Oto, czego używam, aby uzyskać spójną wartość skrótu:
źródło
Oto fragment, którego używam, aby uzyskać MD5 dla danego ciągu:
źródło