Como obter o hash MD5 de uma string diretamente no terminal?

189

Como faço para obter o MD5 hash de um string diretamente a partir do terminal?

Por exemplo, eu quero o abcdefghash da string . Atualmente, o comando md5sum aceita apenas um nome de arquivo como entrada. Quero simplesmente inserir a linha a seguir e tudo pronto.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Como posso conseguir isso?

Hamed Momeni
fonte
2
md5 -s abcdefg
raitisd

Respostas:

252

Você também pode dizer algo como isto:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Basicamente, faz o mesmo descrito em @enzotib, mas talvez seja um pouco mais simples.

jfmessier
fonte
2
Você também deseja atualizar o resultado do exemplo, pois 7803ffca ... é o resultado com a nova linha adicionada. O resultado correto para o comando acima é83218ac34c1834c26781fe4bde918ee4 -
Xanthir 27/05
19
por que existem espaços e um traço no final?
Keune
11
Corrija-me se estiver errado, mas acho que isso ocorre porque o MD5sum foi aplicado a um fluxo de dados, em vez de ler um conteúdo de arquivo, que tem um nome associado a ele.
Jfmessier 03/12/2015
11
Observe que isso -né obrigatório. Sem ele, seu hash estará totalmente errado, pois inclui o caractere de nova linha.
Pithikos
11
Como eu poderia ignorar -no final. @jfmessier
alper
61

Muito simples, aceita stdin, então

md5sum <<<"my string"

Para evitar a nova linha à direita adicionada pelo shell:

printf '%s' "my string" | md5sum
enzotib
fonte
Dar um voto a @messier e @enzotib; ambos se enquadram na minha premiada categoria "simplicidade elegante". Eu seria capaz de usar o <<<"pipe em um script; echo stringganha para a linha de comando. Bem feito.
Tom
3
+1 para usar printfcorretamente. Se você quiser ter a soma sem o -, coloque | cut -d ' ' -f 1. Exemplo de uso:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn
11
é estranho, mas o <<<operador e a printffunção estão dando resultados completamente diferentes para o hash md5! o resultado de printf está correto!
Hamed Momeni 21/07
parece que o uso do <<<operador envia uma nova linha para o md5sum!
21118 Hamed Momeni
11
Sim, é verdade, como eu disse entre o primeiro eo segundo exemplo
enzotib
27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

você pode criar um script de shell.

Por exemplo, o nome do script é md5.sh:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

permissão executar:

 chmod +x md5.sh

Então:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Se o seu sistema for macOS. Você precisa modificar este script:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
ty4z2008
fonte
11
Isso é muito longo.
Gucho Ca
11
alternativa ao awk:cut -d ' ' -f 1
phil294 5/17
Criei uma função md5() { echo -n $1 | md5sum | awk '{print $1}'; }no .bashrc e depois posso usá-lo $ md5 testna linha de comando. obrigado pela resposta
Ruben Benjamin
awkComando mais curto :'$0=$1'
Alex Stragies
@AlexStragies yep
ty4z2008
10

A execução do md5sum sem argumentos fará com que ele leia a entrada do terminal. Digite ou cole o que quiser e, quando terminar, pressione ctrl-dpara finalizar a entrada.

psusi
fonte
11
Sim, você também está certo. mas ctrl+dprecisa ser pressionado duas vezes para que funcione.
Hamed Momeni
@ James, se não seguir uma nova linha, sim. Se você pressioná-lo após pressionar Enter, ele precisará apenas uma vez. Quando não segue uma nova linha, apenas força todos os caracteres digitados na linha até o momento a serem processados ​​imediatamente, em vez de aguardar uma nova linha.
psusi
10
openssl md5 filename
openssl sha1 filename

Para canalizar o conteúdo usando eco

echo -n 123456 | openssl md5
convidado
fonte
4

Minha cutucada rápida no --helpfor md5sumdemonstra que o comando:

md5sum -

Em seguida, solicitará uma entrada simples. Introduzir algum texto e, em seguida, usar + Entere Ctrl+ Dpara significar o fim do arquivo faz md5sumcom que cuspa o MD5 do texto bruto que você inseriu (incluindo isso Enter, é um CR, IIRC).

Menos para digitar e sem tubulação! E evitando que sua senha de texto sem formatação seja registrada no histórico do shell! Woo!

Se você não deseja esse CR à direita (que geralmente é o caso se você deseja hash uma senha), não pressione Enterantes de Ctrl+ D, digite Ctrl+ Dduas vezes.

Vai
fonte
2

Nos meus scripts, descobri que há duas coisas que você deve saber sobre esse problema.

  • Não importa se você faz echo "$myvariable"ou echo -n "$myvariable" deve sempre usar doubleqoutes para strings e sempre usar o mesmo método. se não, as coisas não vão combinar.
  • na saída, você sempre obtém um espaço à direita e um traço, como mostra o exemplo:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

Para se livrar disso e ficar apenas com o código 7803ffcaea43bb81a439fde13b29bc35, faça:echo "$myvariable" | md5sum | cut -d" " -f1

Bodo Hugo Barwich
fonte
Não esqueça o -nparâmetro aqui para evitar a saída da nova linha à direita, o que levaria a um md5 errado:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk 3/15/15
1

Existem muitos exemplos para fazer isso, mas alguns deles não são equivalentes porque alguns deles incluem explícita ou implicitamente a nova linha, e outros não.

Gostaria de especificar claramente quais dos métodos populares incluem a nova linha e quais não.

Aqui estão alguns exemplos para calcular o hash md5 SEM nova linha final (CORRETO):

Usando um arquivo com texto:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

Nota: -n em echosignifica: "não exibir a nova linha à direita".

Usando echocom -ninline:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Usando printf:

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Usando apenas o md5sumcomando:

(Vamos escrever md5sum, pressione, em Enterseguida, escreva a seqüência teste pressione a combinação dupla Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Usando o md5sum -comando:

(Vamos escrever md5sum -, pressione, em Enterseguida, escreva a seqüência teste pressione a combinação dupla Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Aqui estão alguns exemplos para o cálculo do hash md5 com a nova linha à direita (SO NOT CORRECT):

Usando um arquivo com texto:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt

Usando echoSEM -ninline:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando aqui as strings :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando apenas o md5sumcomando, mas com a Entertecla, após escrever o texto:

(Vamos escrever md5sum, pressione, em Enterseguida, escreva a string teste, em seguida, pressione agaien Entere uma vez a combinação Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando o md5sum -comando, mas com a Entertecla, após escrever o texto:

(Vamos escrever md5sum -, pressione, em Enterseguida, escreva a string teste, em seguida, pressione agaien Entere uma vez a combinação Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
simhumileco
fonte