Necesita un cli para verificar el hash sha256 de un archivo

Para verificar el sha1 de un archivo que usaría openssl sha1 <file>, no estoy seguro de qué usar para verificar el hash sha256 del archivo, sin embargo, ¿qué recomendaría?

Respuestas (4)

Puedes usar

openssl dgst -sha256 <file>

Probado en LibreSSL 2.6.4 en macOS 10.14 (Mojave).


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

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

Esto también es portátil y se ejecuta en ubuntu.
Es posible que deba usar /usr/bin/opensslexplícitamente
"Anterior a Mojave": openssl sha256 <file>todavía funciona, en MacOS Catalina, a partir de noviembre de 2020.

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
Hmm, parece que no lo tengo en osx 10.11.3. which shashumno da salida a nada
@erikvold ¿Sabes qué? Apuesto a que obtuve las herramientas de línea de comandos de Xcode. Argh. Realmente desearía que Apple no contaminara /usr/bincon cosas opcionales. Tendré que verificar que este sea el caso más tarde hoy. Actualizará la respuesta si de hecho proviene de la instalación de XCL.
shasumdevuelve un hash diferente al openssl sha -sha256 <file>(siendo este último el hash correcto). ¿Alguna idea de por qué?
@ws6079 shasumes un script perl, se usa Digest::SHApara calcular el valor hash. Para el mismo archivo, obtengo exactamente el mismo SHA usando shasumo opensslpara un SHA-256cálculo de hash. Ver: gist.github.com/ianchesal/82a064b8971eb5e717ce84f3ded6dbfd
shahsum está funcionando muy bien para mí hoy.

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

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

  • nada , si el hash se creó con -to sin opción (modo de texto, que es el predeterminado)

  • asterisco ( *), si el hash se creó con -b(modo binario)

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

  • signo de intercalación ( ^), si el hash se creó con -0(modo bits)

seguido de la ruta al archivo,
seguido de una sola marca de cierre ( ').

Como el siguiente desglose, con paréntesis delimitadores alrededor de las partes hash y ruta de archivo, y corchetes alrededor de la parte opcional de "carácter de modo". ( No incluya los paréntesis ni los corchetes en la vida real, ¡solo están aquí para que las partes sean fáciles de ver! )

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

Desglosado :

El comando shasum real esshasum -a 256 -c

  • -a 256dice shasumque use sha256 .

  • -cdice shasumque "verifique" la entrada proporcionada.

El <<<es un juego de caracteres especial de Unix/Linux, llamado operador de "redireccionamiento". Es para introducir algo en un comando anterior. Al usarlo, estamos diciendo que vamos a proporcionar una cadena de información para que el shasumcomando la use como entrada.

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

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

  • La parte del carácter de modo puede ser nada, un asterisco ( *), un signo de interrogación ( ?) o un signo de intercalación ( ^). Esto indica shasumel modo con el que se generó el hash. (Nota: ningún carácter en absoluto, que representa el modo de texto, es shasumel predeterminado).

  • La parte de la ruta del archivo es la ruta real al archivo que se va a verificar.


Entonces, aquí hay un ejemplo de la vida real que compara un archivo de descarga de MAMP en particular con su supuesto valor SHA-256 . Se *requería el carácter de modo para que esta verificación funcionara:

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

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

DE ACUERDO:

MAMP_MAMP_PRO_5.2.paquete: OK

o

FALLIDO:

MAMP_MAMP_PRO_5.2.pkg: shasum
FALLIDO: ADVERTENCIA: 1 suma de verificación calculada NO coincide

Para mí, esto funciona sin el asterisco antes del nombre del archivo (al igual que con el asterisco).
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 la base del uso del asterisco en ningún otro lugar. ¿Podría aclarar?
¿La presencia del asterisco indica que la suma de verificación utilizada como entrada en el ejemplo se generó en modo binario (con --binaryopción)? De la página del manual: "Al verificar, la entrada debe ser una salida anterior de este programa. El modo predeterminado es imprimir una línea con suma de verificación, un carácter que indica el tipo ( *para binario, `` para texto, Upara UNIVERSAL, ^para BITS, ?para portátil), y el nombre de cada ARCHIVO". Entonces, ¿los caracteres entre la suma de verificación y el nombre del archivo dependen del modo establecido cuando se creó la suma de verificación?
@SoFarther: sí, tienes razón. Después de experimentar un poco para probar esa idea, actualicé mi publicación para aclarar el aspecto del "modo".
Así que aclare si necesita un asterisco (o un carácter de modo que no sea el predeterminado) se correlaciona con el archivo. Los archivos de texto pueden omitir el carácter porque el modo predeterminado es texto. Omitirlo para un ISO generará el error "shasum: entrada estándar: no se encontraron líneas de suma de verificación SHA con el formato correcto". Archivo binario, por lo que se necesitará el asterisco (modo binario).

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'