Por que a verificação da soma de verificação SHA256 com `sha256sum` falha no Debian e funciona no Ubuntu?

34

No Ubuntu 14.04, sha256sumdo coreutilsfunciona como eu esperava:

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

No entanto, o mesmo comando com o mesmo arquivo no Debian Wheezy falha:

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

Eu não entendo isso. Como posso verificar a soma de verificação em um script de shell no Debian?


No Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

Em Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

As páginas de manual nos dois sistemas operacionais dizem:

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
fonte

Respostas:

45

Preocupa-se com o espaçamento. Se você executar:

sha256sum /dev/null

você recebe

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(dois espaços). Quando você usa echoassim, há apenas um espaço entre as palavras.

A versão 8.13 deseja o formato exato em que sua saída está. Se você usar:

echo "$SUM  $FILE" | sha256sum -c

(novamente, dois espaços) deve funcionar. As versões mais recentes não se importam com quantos espaços existem, portanto, também funcionarão com eles.

Michael Homer
fonte
18
Curiosidades adicionais: o segundo personagem do espaço tem, de fato, um significado. Isso indica que a soma de verificação foi calculada no modo de texto . Por outro lado, a *na frente do nome do arquivo indica o modo binário . Compare a saída de sha256sum -t /dev/null(modo de texto, o padrão) com sha256sum -b /dev/null(modo binário). Aparentemente, isso não faz diferença no Unix / Linux, mas no Windows .
Dubu