11 votos

¿Cómo verifico la suma de comprobación o hash de un archivo descargado en la línea de comandos?

Si he descargado un archivo de Internet y el sitio web de origen ha proporcionado una suma de comprobación o hash (por ejemplo, SHA-256), ¿cómo puedo verificar que el hash del archivo descargado coincide con el hash indicado en el sitio?

Por ejemplo, he descargado un archivo y el sitio web indica que su hash SHA-256 es:

d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915

Sé cómo crear un hash SHA-256 del archivo descargado utilizando:

shasum -a 256 /path/to/downloaded.pkg

Sin embargo, no quiero hacer una comprobación manual del hash. En su lugar quiero comparar los dos hashes usando un comando como diff preferiblemente ejecutando una única línea de comandos.

1 votos

Si es sólo para un archivo de vez en cuando, ¿por qué no simplemente copiar la suma de comprobación de la página web (en el portapapeles), a continuación, sólo tiene que hacer una +F en la ventana Terminal?

0 votos

Tal vez me estoy perdiendo algo, pero no lo hace +F ¿encontrar una cadena coincidente si esa cadena (por ejemplo, la suma de comprobación) aparece en el historial visible del terminal?

2 votos

Exacto. Ejecute su comando en la ventana Terminal para calcular el hash de su archivo. Luego haz +F en la ventana Terminal y si la suma de comprobación coincide, se resaltará. Si lo que digo no tiene sentido, es que no he entendido bien tu pregunta.

5voto

Jose Chavez Puntos 645

Ya has recibido respuestas sobre cómo hacer una comparación automatizada de los dos valores hash para asegurarte de que son completamente iguales. Sólo quería añadir un punto de vista diferente sobre cómo comparar los valores hash.

En realidad, en casi todos los casos basta con hacer una "comparación a ojo". Es decir, si se comprueba que los primeros y los últimos caracteres son iguales y "parecen iguales", se trata de una buena verificación.

Si intentas hacer una comparación automatizada "de memoria", corres el riesgo de introducir accidentalmente la línea de órdenes equivocada o de alterar sutilmente el significado de la orden.

La alternativa a hacerlo de memoria es perder tiempo buscando y cortando-pegando la línea script/comando cada vez que necesites comprobarlo. Esto puede llevar a situaciones en las que simplemente renunciamos a la comprobación, porque tenemos prisa o creemos que es de bajo riesgo.

La razón por la que una "comparación a ojo" suele ser suficiente es que para un atacante es muy, muy difícil crear un archivo con un hash SHA-256 que sea "casi igual" al del archivo original. Es casi tan difícil como crear un hash SHA-256 que sea igual al del archivo original. Probablemente se podría asumir que si pueden crear uno, pueden crear el otro.

Las propiedades de SHA-256 (y, de hecho, de cualquier hash criptográfico) son tales que incluso el más mínimo cambio en el archivo da como resultado un valor hash muy diferente.

0 votos

Es un punto muy bueno.

5voto

HiddenWindshield Puntos 121

Cuando calcula por primera vez la suma de un fichero, produce una salida consistente en la suma, dos espacios y el nombre del fichero que produjo esa suma. Si redirige esa salida a un fichero, puede utilizar posteriormente la opción "-c" (de "comprobar") para comprobar automáticamente cada fichero de la lista, para ver si la suma sigue coincidiendo.

Por lo tanto, crear un archivo de texto llamado "checksum.txt" con una línea:

d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  downloaded.pkg

A continuación, ejecute el comando:

shasum -a 256 -c checksum.txt

El comando calculará la suma de comprobación sha-256 del archivo "downloaded.pkg", comparará el resultado con el valor precalculado y le dirá si coincide o no.

Puede que ni siquiera tengas que crear tú mismo el archivo de suma; la mayoría de las veces, los sitios web que proporcionan sumas de comprobación te permitirán descargar un archivo de texto que ya tiene el formato adecuado.

0 votos

Es una buena opción. Por supuesto, hay que eliminar el archivo de suma de comprobación que se creó después. Creo que este método es más atractivo para comprobar varios archivos. Supongo que es una cuestión de preferencia si esto es deseable o no.

3voto

Puede comparar la suma de comprobación directamente con un bash función:

function checksha256() {
    # Usage: checksha256 file checksum
    if [[ $(shasum -a 256 "$1" | cut -f 1 -d' ') == "$2" ]]; then
        echo Match
    else
        echo No match
    fi
}

o

function checksha256() {
    # Usage: checksha256 file checksum
    echo "$1  $2" | shasum -s -a 256 -c
}

Los dos espacios son importantes en este caso porque ese es el formato shasum espera.

0 votos

Gracias por esto @nohillside. Es bueno tener una función si uno quiere hacer esta comparación de suma de comprobación con bastante frecuencia. ¿Dónde se 'almacena' una función de este tipo? ¿En el entorno de uno o como un script de alguna manera? (Para uso incidental, requiere un poco más de tecleo supongo).

1 votos

@TransferOrbit En .bashrc normalmente

0 votos

En mi MacOS (Catalina 10.15.4), que ejecuta zsh por defecto, el comando sha256sum no existe (utilizado en su segunda alternativa). Utilizando shasum -a 256 -c funciona, sin embargo.

2voto

TransferOrbit Puntos 101

Una solución es utilizar diff para comparar las cadenas de los dos hashes. Afortunadamente, esto se puede hacer en una sola entrada de línea de comandos de la siguiente manera:

diff -is <(echo "d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  /path/to/downloaded.pkg") <(shasum -a 256 /path/to/downloaded.pkg)

Nota importante: Debe haber dos espacios entre la almohadilla de la primera parte del término y la ruta del archivo descargado.

Como alternativa, se puede utilizar shasum La opción de comprobación incorporada:

echo "d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  /path/to/downloaded.pkg" | shasum -a 256 -c

Existen partes de esta respuesta en varios lugares, pero a pesar de buscar ávidamente no he encontrado que se haya reunido en ningún sitio. Si hay alternativas mejores, me encantaría conocerlas.

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