¿Por qué la verificación de la suma de comprobación SHA256 con `sha256sum` falla en Debian y funciona en Ubuntu?

34

En Ubuntu 14.04, sha256sumdesde coreutilstrabajos como esperaba:

echo 879dd0d7637876be4796f7e6f194a111d21088be85cfe717fc97e2e7f05e79d2 /tmp/myfile | sha256sum -c
/tmp/myfile: OK

Sin embargo, el mismo comando exacto con el mismo archivo en Debian Wheezy falla:

sha256sum: standard input: no properly formatted SHA256 checksum lines found

No entiendo esto ¿Cómo puedo verificar la suma de verificación de manera confiable en un script de shell en Debian?


En Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

En Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

Las páginas de manual en ambos SO dicen:

SYNOPSIS
       sha256sum [OPTION]... [FILE]...

DESCRIPTION
       Print or check SHA256 (256-bit) checksums.  With no FILE,
       or when FILE is -, read standard input.

[...]

       -c, --check
              read SHA256 sums from the FILEs and check them
gertvdijk
fuente

Respuestas:

45

Se preocupa por el espacio. Si tu corres:

sha256sum /dev/null

usted obtiene

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(dos espacios). Cuando usas echoasí, solo hay un espacio entre las palabras.

La versión 8.13 quiere el formato exacto en el que se encuentra su salida. Si usa:

echo "$SUM  $FILE" | sha256sum -c

(de nuevo, dos espacios) debería funcionar. A las versiones más recientes no les importa cuántos espacios hay, por lo que también funcionará con ellos.

Michael Homer
fuente
18
Curiosidades añadidas: el segundo personaje espacial tiene, de hecho, un significado. Denota que la suma de verificación se ha calculado en modo texto . En contraste, un *frente al nombre del archivo denota el modo binario . Compare la salida de sha256sum -t /dev/null(modo de texto, el valor predeterminado) con sha256sum -b /dev/null(modo binario). Aparentemente, esto no hace una diferencia en Unix / Linux, pero podría hacerlo en Windows .
Dubu