201 votos

Necesito una cli para comprobar el hash sha256 de un archivo

Para comprobar el sha1 de un archivo utilizaría openssl sha1 <file> Sin embargo, no estoy seguro de qué utilizar para comprobar el hash sha256 del archivo, ¿qué me recomiendas?

258voto

Greg R. Puntos 499

Puede utilizar

openssl dgst -sha256 <file>

Probado en LibreSSL 2.6.4 en MacOS 10.14 (Mojave).


Antes de Mojave puede utilizar openssl sha -sha256 <file> o openssl sha256 <file> .

Para comprobar las opciones de la línea de comandos para el comando openssl sha: openssl sha -help .

1 votos

Esto también es portátil y se ejecuta en ubuntu.

0 votos

Es posible que tenga que utilizar /usr/bin/openssl explícitamente

1 votos

"Antes de Mojave" - openssl sha256 <file> todavía funciona, en MacOS Catalina, a partir de noviembre de 2020.

128voto

shsteimer Puntos 8749

OS X viene con un comando shasum .

> which shasum
/usr/bin/shasum

Puedes usar:

> shasum -a 256 <file>

Más detalles:

> 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

0 votos

Hmm parece que no lo tengo en osx 10.11.3. which shashum no produce nada

4 votos

@erikvold ¿Sabes qué? Seguro que tengo con las herramientas de línea de comandos de Xcode. Argh. Realmente me gustaría que Apple no contaminara /usr/bin con cosas opcionales. Tendré que verificar que esto es así hoy mismo. Actualizaré la respuesta si efectivamente proviene de la instalación de XCL.

2 votos

shasum devuelve un hash diferente al de openssl sha -sha256 <file> (siendo este último el hash correcto). ¿Alguna idea de por qué?

14voto

Nickparsa Puntos 140

Para aclarar La útil respuesta de @John - que permite comparar un hash dado con su archivo en un solo comando:

Entre en shasum -a 256 -c <<< ,
seguido de un espacio opcional,
seguido de una sola marca ( ' ),
seguido del hash a comparar,
seguido de un espacio,
seguido de un carácter de modo, basado en cómo se generó el hash inicial:

  • nada si el hash fue creado con -t o ninguna opción (modo texto, que es el predeterminado)

  • asterisco ( * ), si el hash fue creado con -b (modo binario)

  • signo de interrogación ( ? ), si el hash fue creado con -p (modo portátil)

  • caret ( ^ ), si el hash fue creado con -0 (modo bits)

seguido de la ruta del archivo,
seguido de un tic de cierre ( ' ).

Como el siguiente desglose, con paréntesis de delimitación alrededor de las partes hash y filepath, y corchetes alrededor de la parte opcional "carácter de modo". ( No incluyas los paréntesis ni los corchetes en la vida real: ¡sólo están aquí para que las partes sean fáciles de ver! )

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

Descompuesto :

El actual shasum comando es shasum -a 256 -c

  • -a 256 dice shasum para usar sha256 .

  • -c dice shasum para "comprobar" la entrada proporcionada.

El <<< es un conjunto de caracteres especiales de Unix/Linux, llamado operador de "redirección". Sirve para introducir algo en un comando anterior. Al usarlo, estamos diciendo que vamos a proporcionar una cadena de información para el shasum para usar como entrada.

La cadena de información de entrada debe tener marcas simples de apertura y cierre, como 'some string here' o, en este caso, el hash, el carácter de modo y la ruta del archivo a comprobar.

  • El hash dentro de la cadena no necesita nada especial, pero debe ir seguida de un espacio.

  • El carácter de modo puede ser nada, un asterisco ( * ), un signo de interrogación ( ? ), o un signo de interrogación ( ^ ). Esto indica shasum el modo con el que se generó el hash. (Nota: ningún carácter, que represente el modo texto, es shasum por defecto).

  • El ruta del archivo es la ruta real del archivo que se va a comprobar.


He aquí un ejemplo de la vida real en el que se comprueba un Descarga de MAMP archivo contra su supuesta SHA-256 valor. El * para que esta comprobación funcione:

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

Nota: el resultado de este comando (para mi archivo de ejemplo) es

BIEN:

MAMP_MAMP_PRO_5.2.pkg: OK

o

FALLÓ:

MAMP_MAMP_PRO_5.2.pkg: FAILED
shasum: ADVERTENCIA: 1 suma de comprobación calculada NO coincide

0 votos

Para mí esto funciona sin el asterisco antes del nombre del archivo (así como con el asterisco).

0 votos

shasum -c <<< '7cb77378a0749f2a9b7e09ea62ffb13febf3759f *sample.txt' devuelve el mensaje *sample.txt: FAILED open or read . Sin el asterisco, sample.txt: OK . Todavía no he podido encontrar el fundamento del uso del asterisco en otro lugar. ¿Podría aclararlo?

0 votos

¿La presencia del asterisco indica que la suma de comprobación utilizada como entrada en el ejemplo fue generada en modo binario ( con --binary )? De la página man: "Cuando se comprueba, la entrada debe ser una salida anterior de este programa. El modo por defecto es imprimir una línea con la suma de comprobación, un carácter que indica el tipo ( * para el binario, ` ` para el texto, U para UNIVERSAL, ^ para BITS, ? para el portátil), y el nombre de cada ARCHIVO". Entonces, ¿los caracteres entre la suma de comprobación y el nombre del archivo dependen del modo establecido cuando se creó la suma de comprobación?

10voto

John Puntos 16

Yo usaría este comando.

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

Ejemplo:

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X