Benötigen Sie ein CLI, um den sha256-Hash einer Datei zu überprüfen

127

Um das sha1 einer Datei zu überprüfen, die ich verwenden würde, openssl sha1 <file>bin ich nicht sicher, was ich verwenden soll, um den sha256-Hash der Datei zu überprüfen. Was würden Sie empfehlen?

erikvold
quelle

Antworten:

156

Sie können verwenden

openssl dgst -sha256 <file>

Getestet unter LibreSSL 2.6.4 unter macOS 10.14 (Mojave).


Vor Mojave können Sie openssl sha -sha256 <file>oder verwenden openssl sha256 <file>.

Um zu überprüfen , Befehlszeilenoptionen für den openssl sha Befehl: openssl sha -help.

janm
quelle
Dies ist auch portabel und läuft auf Ubuntu.
Christian Bongiorno
86

OS X wird mit einem Shasum-Befehl ausgeliefert .

> which shasum
/usr/bin/shasum

Sie können verwenden:

> shasum -a 256 <file>

Mehr Details:

> shasum --help
Usage: shasum [OPTION]... [FILE]...
Print or check SHA checksums.
With no FILE, or when FILE is -, read standard input.

  -a, --algorithm   1 (default), 224, 256, 384, 512, 512224, 512256
  -b, --binary      read in binary mode
  -c, --check       read SHA sums from the FILEs and check them
  -t, --text        read in text mode (default)
  -p, --portable    read in portable mode
                        produces same digest on Windows/Unix/Mac
  -0, --01          read in BITS mode
                        ASCII '0' interpreted as 0-bit,
                        ASCII '1' interpreted as 1-bit,
                        all other characters ignored

The following two options are useful only when verifying checksums:
  -s, --status      don't output anything, status code shows success
  -w, --warn        warn about improperly formatted checksum lines

  -h, --help        display this help and exit
  -v, --version     output version information and exit

When verifying SHA-512/224 or SHA-512/256 checksums, indicate the
algorithm explicitly using the -a option, e.g.

  shasum -a 512224 -c checksumfile

The sums are computed as described in FIPS-180-4.  When checking, the
input should be a former output of this program.  The default mode is to
print a line with checksum, a character indicating type (`*' for binary,
` ' for text, `?' for portable, `^' for BITS), and name for each FILE.

Report shasum bugs to mshelor@cpan.org
Ian C.
quelle
Hmm ich scheine es nicht auf OSX 10.11.3 zu haben. which shashumgibt nichts aus
erikvold
3
@erikvold Weißt du was? Ich wette, ich habe mit den Xcode Command Line Tools. Argh. Ich wünschte wirklich, Apple würde nicht /usr/binmit optionalen Dingen verschmutzen . Ich werde das später heute noch überprüfen müssen. Aktualisiert die Antwort, wenn sie tatsächlich von der XCL-Installation stammt.
Ian C.
2
shasumgibt einen anderen Hash zurück als openssl sha -sha256 <file>(wobei letzterer der richtige Hash ist). Irgendeine Idee warum?
ws6079
@ ws6079 shasumist ein Perl-Skript, mit Digest::SHAdem der Hash-Wert berechnet wird. Für dieselbe Datei erhalte ich genau dieselbe SHA, indem ich entweder shasumoder opensslfür eine SHA-256Hash-Berechnung verwende. Siehe: gist.github.com/ianchesal/82a064b8971eb5e717ce84f3ded6dbfd
Ian C.
Shahsum arbeitet heute großartig für mich.
Nycynik
7

Der shasumBefehl wird seit einiger Zeit mit OSX ausgeliefert. Es gibt das gleiche Ergebnis wie openssl sha -sha256bei shasumVerwendung der -a 256Option.

karl
quelle
6

Zur Verdeutlichung der nützlichen Antwort von @ John, mit der Sie einen bestimmten Hash mit seiner Datei in einem Befehl vergleichen können:

Geben Sie ein shasum -a 256 -c <<<,
gefolgt von einem optionalen Leerzeichen,
gefolgt von einem einzelnen Häkchen ( '),
gefolgt von dem zu vergleichenden Hash,
gefolgt von einem Leerzeichen,
gefolgt von einem Moduszeichen, basierend darauf, wie der anfängliche Hash generiert wurde:

  • nichts , wenn der Hash mit -toder ohne Option erstellt wurde (Textmodus, der die Standardeinstellung ist)

  • Sternchen ( *), wenn der Hash mit -b(Binärmodus) erstellt wurde

  • Fragezeichen ( ?), wenn der Hash mit -p(portabler Modus) erstellt wurde

  • caret ( ^), wenn der Hash mit -0(bits mode) erstellt wurde

gefolgt vom Pfad zur Datei,
gefolgt von einem abschließenden einzelnen Häkchen ( ').

Wie in der folgenden Aufteilung, mit Begrenzung der Parens um die Hash- und Dateipfadteile und eckigen Klammern um den optionalen "Moduszeichen" -Teil. ( Fügen Sie im wirklichen Leben keine Parens oder Klammern hinzu - sie sind nur dazu da, die Teile einfach zu sehen! )

shasum -a 256 -c <<< '(hashToCompare) [mode character](filepath)'

Aufgeschlüsselt :

Der eigentliche Shasum- Befehl lautetshasum -a 256 -c

  • -a 256sagt sha256shasum zu benutzen .

  • -cfordert Sie shasumauf, die bereitgestellten Eingaben zu "überprüfen".

Dies <<<ist ein Unix / Linux-Sonderzeichensatz, der als "Umleitungs" -Operator bezeichnet wird. Es ist dafür gedacht, etwas in einen vorherigen Befehl einzuspeisen. Wenn Sie es verwenden, geben Sie eine Reihe von Informationen an, die der shasumBefehl als Eingabe verwenden soll.

Die Zeichenfolge der Eingabeinformationen muss einzelne öffnende und schließende Häkchen enthalten, z. B. 'some string here'in diesem Fall den Hash, das Moduszeichen und den zu überprüfenden Dateipfad.

  • Der Hash- Teil in der Zeichenkette benötigt nichts Besonderes - es muss jedoch ein Leerzeichen folgen.

  • Der Moduszeichenteil kann nichts, ein Sternchen ( *), ein Fragezeichen ( ?) oder ein Caret ( ^) sein. Dies gibt shasumden Modus an, mit dem der Hash generiert wurde. (Hinweis: Kein Zeichen, das den Textmodus darstellt, ist shasumdie Standardeinstellung.)

  • Der Dateipfad- Teil ist der tatsächliche Pfad zu der zu überprüfenden Datei.


Hier ist ein Beispiel aus der Praxis, in dem eine bestimmte MAMP-Download- Datei mit ihrem angeblichen SHA-256- Wert verglichen wird. Das *Moduszeichen war erforderlich, damit diese Prüfung funktioniert:

shasum -a 256 -c <<< 'f05ede012b8a5d0e7c9cf17fee0fa1eb5cd8131f3c703ed14ea347f25be11a28 *MAMP_MAMP_PRO_5.2.pkg'

Hinweis: Das Ergebnis dieses Befehls (für meine Beispieldatei) ist entweder -

OKAY:

MAMP_MAMP_PRO_5.2.pkg: OK

oder

GESCHEITERT:

MAMP_MAMP_PRO_5.2.pkg: FAILED
shasum: WARNUNG: 1 berechnete Prüfsumme stimmte NICHT überein

Leanne
quelle
Bei mir funktioniert das ohne das Sternchen vor dem Dateinamen (wie auch mit dem Sternchen).
Peter W
shasum -c <<< '7cb77378a0749f2a9b7e09ea62ffb13febf3759f *sample.txt'Gibt die Nachricht zurück *sample.txt: FAILED open or read. Ohne das Sternchen sample.txt: OK. Ich konnte die Basis für die Verwendung des Sternchens an anderer Stelle noch nicht finden. Könnten Sie das klären?
SoFarther
Bedeutet das Vorhandensein des Sterns, dass die im Beispiel als Eingabe verwendete Prüfsumme im Binärmodus (mit --binaryOption) generiert wurde ? Aus der Manpage: "Bei der Überprüfung sollte die Eingabe eine frühere Ausgabe dieses Programms sein. Der Standardmodus ist das Drucken einer Zeile mit Prüfsumme, einem Zeichen, das den Typ angibt ( *für Binär,` `für Text, Ufür UNIVERSAL, ^für BITS, ?für portable) und Name für jede DATEI. " Die Zeichen zwischen Prüfsumme und Dateiname hängen also vom Modus ab, der bei der Erstellung der Prüfsumme festgelegt wurde.
SoFarther
@ SoFarther: ja, du hast recht. Nach einigem Experimentieren, um diese Idee zu beweisen, habe ich meinen Beitrag aktualisiert, um den "Modus" -Aspekt zu verdeutlichen.
Leanne
6

Ich würde diesen Befehl verwenden.

shasum -a 256 -c <<<'_paste hash to compare here_ *_path to file goes here_'

Beispiel:

shasum -a 256 -c <<< '0d2ea6de4f2cbd960abb6a6e020bf6637423c07242512596691960fcfae67206 */Users/USERNAME/Downloads/someprogram.dmg'
John
quelle