Como criar hashes de senha SHA512 na linha de comando

75

No Linux, posso criar um hash de senha SHA1 usando sha1pass mypassword . Existe uma ferramenta de linha de comando semelhante que me permite criar sha512 hashes? Mesma pergunta para Bcrypt e PBKDF2 .

    
por student 17.10.2012 / 20:38

8 respostas

47

Sim, você está procurando por mkpasswd , que (pelo menos no Debian) faz parte do pacote whois . Não pergunte por que ...

anthony@Zia:~$ mkpasswd -m help
Available methods:
des     standard 56 bit DES-based crypt(3)
md5     MD5
sha-256 SHA-256
sha-512 SHA-512

Infelizmente, minha versão, pelo menos, não faz bcrypt. Se a sua biblioteca C, deve (e a página do manual dá uma opção -R para definir a força). -R também funciona no sha-512, mas não tenho certeza se seu PBKDF-2 ou não.

Se você precisa gerar senhas bcrypt, você pode fazê-lo de forma bastante simples com o módulo Crypt::Eksblowfish::Bcrypt Perl.

    
por 17.10.2012 / 20:47
65

Em qualquer uma das distribuições da Red Hat, como Fedora, CentOS ou RHEL, o comando mkpasswd não inclui o mesmo conjunto de comutadores que a versão normalmente inclusa no Debian / Ubuntu.

NOTA: O comando mkpasswd é, na verdade, parte do pacote expect e provavelmente deve ser evitado. Você pode descobrir a qual pacote ele pertence com um desses comandos.

$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd

Exemplo

$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386

Ambos os métodos são superiores ao uso de rpm , pois os pacotes não precisam ser instalados para localizar */mkpasswd .

Soluções alternativas

Para contornar isso, você pode usar os seguintes liners Python ou Perl para gerar senhas SHA-512. Tome nota que estes são salgados:

Python (> = 3,3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

ou com script -

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'

Python (2.x ou 3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

Nota: $ 6 $ designa sha512. O suporte para esse método de especificação do algoritmo depende do suporte na função de biblioteca crypt (3) do nível do sistema operacional (geralmente em libcrypt). Não é dependente da versão do python.

Perl

$ perl -e 'print crypt("password","\\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

Nestes exemplos, a senha é a string "senha" e o sal é "saisalt". Ambos os exemplos estão usando $ 6 $ , o que denota que você deseja que o crypt use o SHA-512.

    
por 19.05.2013 / 06:41
14

Você pode usar o utilitário doveadm , que está incluído no pacote dovecot .

doveadm pw -s SHA512-CRYPT

Exemplo de resultado:

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1

Basta cortar {SHA512-CRYPT} e você receberá sua string SHA512 em hash.

    
por 10.09.2015 / 10:41
12

Execute este comando:

$ /sbin/grub-crypt --sha-512

digite a palavra que você deseja hash.

    
por 09.05.2014 / 20:29
3

Para expandir as soluções alternativas do @slm acima, se você estiver preocupado com alguém pegando seu histórico bash e ver a senha em texto simples, você pode inserir raw_input() na instrução python onde os campos salt e password ele pede para você. O texto não é mascarado enquanto você digita, mas não aparece no seu histórico bash. Você também pode iniciar o comando com um espaço principal, mas eu sempre esqueço de fazer isso.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\\$' + raw_input() + '\$')"
    
por 13.12.2014 / 06:42
0

Se você estiver usando o método Python (> = 2.7) da resposta do sim e quiser confirmar sua senha antes de gerá-la - porque você senhas com o dedo gordo ...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'
    
por 30.11.2017 / 00:06
0

sha512 htpasswd

Comando que solicita usuário e senha e gera um arquivo htpasswd regular:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd

Funciona com todas as versões do Python > 2.5.

    
por 21.02.2018 / 16:30
-9

Você pode usar sha512sum :

echo "password" | sha512sum
    
por 06.04.2013 / 07:33