Hai bisogno di un cli per controllare l'hash sha256 di un file


129

Per controllare lo sha1 di un file che openssl sha1 <file>userei non sono sicuro di cosa usare per controllare l'hash sha256 del file, cosa consiglieresti?

Risposte:


157

Puoi usare

openssl dgst -sha256 <file>

Testato su LibreSSL 2.6.4 su macOS 10.14 (Mojave).


Prima di Mojave puoi usare openssl sha -sha256 <file>o openssl sha256 <file>.

Per verificare le opzioni della riga di comando per il comando sha openssl: openssl sha -help.


Anche questo è portatile e funziona su Ubuntu.
Christian Bongiorno,

87

OS X viene fornito con un comando shasum .

> which shasum
/usr/bin/shasum

Puoi usare:

> shasum -a 256 <file>

Più dettagli:

> 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

Hmm Non sembra averlo su OSX 10.11.3. which shashumnon produce nulla
erikvold

3
@erikvold Sai cosa? Scommetto che ho ottenuto con gli strumenti Xcode Command Line. Argh. Vorrei davvero che Apple non inquinasse /usr/bincon roba opzionale. Dovrò verificare questo è il caso più tardi oggi. Aggiornerà la risposta se effettivamente proviene dall'installazione XCL.
Ian C.

2
shasumrestituisce un hash diverso da openssl sha -sha256 <file>(con quest'ultimo è l'hash corretto). Qualche idea sul perché?
ws6079,

@ ws6079 shasumè uno script perl, utilizzato Digest::SHAper calcolare il valore hash. Per lo stesso file ottengo lo stesso SHA esatto usando uno shasumo opensslper un SHA-256calcolo hash. Vedi: gist.github.com/ianchesal/82a064b8971eb5e717ce84f3ded6dbfd
Ian C.

shahsum sta funzionando benissimo per me oggi.
nycynik,

6

Per chiarire la risposta utile di @ John, che consente di confrontare un determinato hash con il suo file in un solo comando:

Inserisci shasum -a 256 -c <<<,
seguito da uno spazio facoltativo,
seguito da un singolo segno di spunta ( '),
seguito dall'hash per confrontare,
seguito da uno spazio,
seguito da un carattere di modalità, basato sulla modalità di generazione dell'hash iniziale:

  • nulla , se l'hash è stato creato con -to nessuna opzione (modalità testo, che è l'impostazione predefinita)

  • asterisco ( *), se l'hash è stato creato con -b(modalità binaria)

  • punto interrogativo ( ?), se l'hash è stato creato con -p(modalità portatile)

  • caret ( ^), se l'hash è stato creato con -0(modalità bit)

seguito dal percorso del file,
seguito da un singolo segno di spunta di chiusura ( ').

Come la seguente suddivisione, con delineare parentesi attorno alle parti hash e percorso file e parentesi quadre attorno alla parte opzionale "carattere modalità". ( Non includere le parentesi o le parentesi nella vita reale: sono solo qui per rendere le parti facili da vedere! )

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

Suddiviso :

Il vero comando shasum èshasum -a 256 -c

  • -a 256dice shasumdi usare sha256 .

  • -cdice shasumdi "controllare" l'ingresso fornito.

Il <<<è un set di caratteri speciale Unix / Linux, chiamato un operatore di "reindirizzamento". Serve per alimentare qualcosa in un comando precedente. Usandolo, stiamo dicendo che forniremo una stringa di informazioni che il shasumcomando può usare come input.

La stringa di informazioni di input deve avere l'apertura e la chiusura di singoli tick, come 'some string here', o in questo caso, l'hash, il carattere mode e il percorso del file da controllare.

  • La parte hash all'interno della stringa non ha bisogno di nulla di speciale, ma deve essere seguita da uno spazio.

  • La parte del carattere in modalità può essere nulla, un asterisco ( *), un punto interrogativo ( ?) o un punto di inserimento ( ^). Questo dice shasumla modalità con cui è stato generato l'hash. (Nota: nessun carattere, che rappresenta la modalità testo, è shasumpredefinito).

  • Il filepath parte, è il percorso effettivo del file da controllare.


Quindi, ecco un esempio reale che controlla un determinato file di download MAMP rispetto al presunto valore SHA-256 . Il *carattere in modalità era necessario per far funzionare questo controllo:

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

Nota: il risultato di questo comando (per il mio file di esempio) è -

OK:

MAMP_MAMP_PRO_5.2.pkg: OK

o

FALLITA:

MAMP_MAMP_PRO_5.2.pkg: shasum FAILED
: ATTENZIONE: 1 checksum calcolato NON corrisponde


Per me questo funziona senza l'asterisco prima del nome del file (così come con l'asterisco).
Peter W

shasum -c <<< '7cb77378a0749f2a9b7e09ea62ffb13febf3759f *sample.txt'restituisce il messaggio *sample.txt: FAILED open or read. Senza l'asterisco, sample.txt: OK. Non sono ancora riuscito a trovare la base dell'uso dell'asterisco altrove. Potresti chiarire?
Quindi, il

La presenza dell'asterisco indica che il checksum utilizzato come input nell'esempio è stato generato in modalità binaria (con --binaryopzione)? Dalla pagina man: "Durante il controllo, l'input dovrebbe essere un precedente output di questo programma. La modalità predefinita è stampare una riga con checksum, un carattere che indica il tipo ( *per binario,` `per il testo, Uper UNIVERSAL, ^per BITS, ?per portatile) e nome per ciascun FILE. " Quindi, i caratteri tra il checksum e il nome del file dipendono dalla modalità impostata al momento della creazione del checksum?
Quindi

@SoFarther: sì, hai ragione. Dopo alcuni esperimenti per dimostrare quell'idea, ho aggiornato il mio post per chiarire l'aspetto "mode".
leanne

6

Vorrei usare questo comando.

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

Esempio:

shasum -a 256 -c <<< '0d2ea6de4f2cbd960abb6a6e020bf6637423c07242512596691960fcfae67206 */Users/USERNAME/Downloads/someprogram.dmg'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.