Por que o jogo do SHA não é?

1

Estou tentando escrever um script e ele usa o SHA de uma data, mas estou obtendo dois resultados diferentes e, para minha vida, não consigo entender o motivo.

echo -n 03112016 | cut -d'.' -f4 | sha256sum | cut -d' ' -f 1
482c00f7db8419d9f9a151d54de301d73c8f688b2e3e91c485f369596543612e

date "+%m%d%Y" | tr -d '\n' | sha256sum | cut -d' ' -f 1
d373ab72ec7d92ee06ebba4748f78829cd62ce68f1ac600ae1767a272869b664

Eu sei que tem que ser algo estúpido no meu fim, mas eu realmente aprecio qualquer ajuda.

    
por leigon 11.03.2016 / 20:10

1 resposta

3

Os utilitários da shell projetados para operar em texto (como cat , cut , sort , tail , etc.) exigem que sua entrada seja um arquivo de texto. Um arquivo de texto, em termos Unix:

  • consiste apenas em caracteres válidos na localidade do ambiente ( LC_CTYPE locale setting), além do byte nulo;
  • consiste em uma sequência de linhas, cada uma terminada por um caractere de nova linha ( \n , a.k.a. feed de linha).

Esse segundo ponto implica que qualquer arquivo não vazio termina com um caractere de nova linha.

O que acontece se a entrada não for um arquivo de texto depende do utilitário. Sistemas Unix antigos tendiam a ignorar o texto em uma linha após um byte nulo e ignorar toda ou parte da última linha incompleta (texto após o último caractere de nova linha). As versões GNU sempre tratam os bytes nulos como um caractere comum e passam principalmente por seqüências de bytes inválidos. As versões GNU sempre processam toda a entrada mesmo se a nova linha final estiver faltando, mas elas diferem em adicionar uma nova linha à direita em sua saída. Por exemplo, GNU cat sempre passa sua entrada inalterada, mas muitos outros, incluindo cut , sempre imprimem uma nova linha no final de cada linha de saída, incluindo a última.

Então, quando você produz a entrada de referência, é preciso suprimir a nova linha à direita no último minuto.

echo 03112016 | cut -d'.' -f4 | tr -d '\n' | sha256sum

ou apenas

echo -n 03112016 | sha256sum
    
por 12.03.2016 / 02:17