Como criar o md5 hash via linha de comando do Arch Linux?

7

No Arch Linux, como posso criar um único hash md5 para uma senha usando a linha de comando? É claro que estou ciente de que existem algoritmos de hash de senhas seguras disponíveis, o que o md5 não é, mas isso é apenas parte de um experimento.

Paradoxo
fonte
4
Você pode remover a palavra "mais" antes de "seguro". Como em, há hashes seguros lá fora (ou pelo menos hashes com alguma segurança), o MD5 não é um deles.
Todd Wilcox
2
Apenas para o registro, até mesmo um hash criptográfico seguro como o SHA-256 não faz diretamente um bom hash de senha . Eu sei que pelo menos você precisa de algo parecido com um sal para derrotar os ataques da mesa do arco-íris , e tenho certeza de que há outros problemas que eu não conheço.
Peter Cordes

Respostas:

18

Simplesmente echopara o md5sum.

O primeiro resultado considerará um caractere de nova linha no final da string, antes de gerar o hash.

$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -

Caso contrário, como afirma o @AFH , se você deseja não ter um caractere de nova linha, faça o seguinte:

$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
Unfundednut
fonte
9
Isso inclui um caractere de nova linha junto com a senha: isso pode ser o que o questionador quer, mas, se não, você precisa echo -n 'P@ssword1' | md5sum. Incluí citações na senha, caso ela inclua caracteres que o shell interpreta; Eu usei aspas simples para inibir a expansão se houver um $.
AFH
7
Isso retornará o resultado errado, porque você não está fazendo hash P@ssword1, mas P@ssword1<Newline>. Use em echo -n P@ssword1 | md5sumvez disso.
phihag
@AFH Eu ampliei a resposta do seu comentário.
Unfundednut
5
"O primeiro resultado retornará um caractere de nova linha com o hash." Não, ele irá considerar um caractere de nova linha ao gerar o hash, o que é uma coisa muito diferente!
Raças de leveza em órbita de
Meu trabalho estava desligado. Corrigir.
Unfundednut
11

Nenhuma das respostas menciona isso com echo -n 'password' | …, você irá escrever sua senha para armazenamento persistente, ou seja, seu histórico.

Você pode evitar isso, dependendo do shell, prefixando o comando com um espaço (teste isso para o seu shell). Leia a documentação dos seus shells sobre como isso é tratado.

Alternativamente, você pode usar md5sumdiretamente, executando md5sum, digitando a senha e depois Ctrl+D. Não bata Enterentre a senha e Ctrl+D, a menos que você queira incluir uma nova linha no hash.

Jonas Schäfer
fonte
1
Você começou tão bem (+1) ... mas depois que você disse que para escrever a senha do avião em um arquivo funciona também (-1) 8-O(quantos furos de segurança ele abre ...). BTW se a variável $HISTCONTROLestiver definida como ignorespace ou ignorar todos os comandos inseridos com um espaço à esquerda não serão armazenados no histórico ... No entanto, é sempre uma boa ideia testá-la diretamente. (+1 de novo :-)) ...
Hastur
@Hastur Bom ponto. Escrever em um arquivo é geralmente melhor do que ter a senha derramada no histórico, porque você pode simplesmente desvincular o arquivo (que pode não funcionar com o histórico, dependendo da configuração - eu vi shells que (re) escrevem o histórico na saída ). No entanto, você está certo de que escrever a senha em um arquivo corretamente não é tão fácil quanto simplesmente executar o vim ou algo assim (pelo menos, seria necessário definir o umask, e não sei ao certo se isso deixa algum furo). Eu removi a parte da resposta.
Jonas Schäfer
Eu noto sua edição (mas eu apenas upvoted eu não posso duas vezes, mas posso pensar em outra coisa ...).
Hastur
8

Aqui está um exemplo usando o openssl

echo -n 'stack overflow' | openssl md5
(stdin)= 481b8423202598ecfb233c5fa68caf68

Openssl implementar vários algoritmos de hash diferentes, se você precisar de um diferente algum dia.

OPSXCQ
fonte
4

Parece que todos estão sugerindo usar echo- pelo menos, na maioria das vezes, felizmente, com -n, o que alivia um dos seus problemas (que imprime uma nova linha no final).

Mas echonão é necessariamente consistente. Ele tem várias peculiaridades comportamentais que você precisa ter em mente e que podem ser incompatíveis entre sistemas. É melhor usar em printfvez disso .

Portanto, você deveria estar usando

$ printf '%s' 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
$

Com printf, se você quiser uma nova linha no final, você tem que explicitamente adicioná-lo:

$ printf '%s\n' 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -
$ echo 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -
$

em vez de ter que pedir para não obtê-lo (e esperar que echofuncione da mesma forma no sistema, isso acontece em algum ponto posterior):

$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
$

Para expandir o ponto sobre as peculiaridadesecho que mencionei acima, aqui estão algumas:

  • Funciona de maneira diferente em vários sistemas. Muitos sistemas modernos suportam -npara dizer echopara não terminar a saída com uma nova linha, mas alguns podem não. E se você quiser realmente imprimir -n? Algumas implementações podem realmente diferir com base nas configurações no shell ou no ambiente.
  • Ele manipula, ou pode não manipular, algumas seqüências de caracteres (particularmente caracteres com escape de barra invertida) de uma maneira especial. Não é totalmente desarrazoado tê-las em senhas, e POSIX não garante nada sobre o comportamento do eco (seu comportamento é especificamente indefinido ) se o primeiro argumento for -nou se algum de seus argumentos contiver barras invertidas.

As respostas para a pergunta acima sobre o uso de printf em vez de eco têm várias outras, assim como links adicionais para mais leitura se você estiver curioso.

um CVn
fonte
"Ele (echo) tem uma série de peculiaridades comportamentais que você precisa ter em mente" Você pode expandir isso?
DavidPostill
@DavidPostill Eu adicionei um pouco sobre isso. Você acha que isso é melhor?
um CVn
Perfeito :) Foi para minha própria educação (eu não queria sugerir que havia algo errado com a sua resposta).
DavidPostill
@DavidPostill Não se preocupe; Eu gosto de tentar fazer minhas respostas tão boas quanto elas podem ser, mesmo quando elas não são as mais votadas! (Eu não esperava que isso atraísse muita atenção mesmo quando comecei a escrevê-lo, mas achei que valeria a pena ter uma resposta discutindo como o printf é provavelmente uma escolha melhor do que o eco particularmente para algo assim.)
um CVn
Isso vale para mim também :)
DavidPostill
3

A questão sugere outra coisa para mim, então, para completar:

Existe um método hash de senhas salgadas com base em MD5, que substituiu a criptografia baseada em DES original () para uso em /etc/shadow. Ele foi substituído por coisas mais novas agora, mas se você encontrar "hash de senha MD5" no estado selvagem, ele pode se referir a isso em vez de um MD5 simples.

Esses hashes baseados em MD5 são marcados pelo prefixo $1$e você pode calculá-los comopenssl passwd -1


fonte
0

Você pode facilmente fazer isso usando echoe md5sum:

 echo -n "password" | md5sum
Aaron Franke
fonte
2
Sem -na echovontade anexar o caractere de nova linha à saída, o hash estará incorreto. Por exemplo, para echo -n lolwut | md5sumo resultado 05a208028929fd77cfb5b08096a837df, enquanto para echo lolwut | md5sumele f291ceceddd9e13a0ab68cf1829ef583.
Ivan Kolmychek