desenv-web-rp.com

Como criar hashes de senha SHA512 na linha de comando

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? A mesma pergunta para Bcrypt e PBKDF2.

90
student

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

[email protected]:~$ 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 o fizer, deve (e a página de manual fornece a opção -R para definir a força). -R também funciona no sha-512, mas não tenho certeza se é PBKDF-2 ou não.

Se você precisar gerar senhas bcrypt, poderá fazê-lo de maneira bastante simples com o módulo Perl Crypt::Eksblowfish::Bcrypt.

59
derobert

Em qualquer uma das distros da Red Hat, como Fedora, CentOS ou RHEL, o comando mkpasswd não inclui o mesmo conjunto de opções da versão normalmente incluída no Debian/Ubuntu.

NOTA: O comando mkpasswd é realmente 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 o seguinte Python ou Perl one-liners para gerar senhas SHA-512. Observe que estas são salgadas:

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', '\$6\$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 da biblioteca crypt (3) no nível do SO (geralmente na libcrypt). Não depende da python.

Perl

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

Nestes exemplos, a senha é a sequência "password" e o salt é "saltsalt". Ambos os exemplos estão usando $ 6 $, o que indica que você deseja que a criptografia use o SHA-512.

75
slm

Você pode usar o utilitário doveadm, 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ê obterá sua string de hash SHA512.

16
obohovyk

Execute este comando:

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

em seguida, insira a Palavra que você deseja hash.

12
ucemike

O OpenSSL tem

openssl passwd -6

A ajuda diz:

$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
 -6                  SHA512-based password algorithm

Para uma saída consistente, você pode especificar o sal:

openssl passwd -6 -salt <YOUR_SALT>

A saída é algo semelhante a:

$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.

com: 6 entre "$" indicando o algoritmo ("-6" acima), seguido por YOUR_SALT e "$", terminando com a soma SHA512.

3
Markus Linnala

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

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"
3
user208145

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 python versões> 2.5.

1
MadMike

Se você está usando o método Python (> = 2.7) da resposta do sim e deseja confirmar sua senha antes que ela gere - porque você usa senhas grossas ...

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

a versão openssl "OpenSSL 1.1.1” no Linux e a versão openssl "LibreSSL 2.6.5” no MacOS suportam md5_crypt.

Basta executar e digitar a senha:

openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>

ou forneça a senha de texto sem formatação diretamente à CLI:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>
0
TMT

PBKDF2

Eu escrevi um aplicativo simples no Go que permite gerar o hash PBKDF2, pois o OpenSSL não fornece uma ferramenta de linha de comando para isso. Ele suporta sha1, sha256, sha512 e md5.

Você pode criar você mesmo ou baixar os binários liberados na seção "release".

https://github.com/riotkit-org/gpbkdf2

O uso é muito simples:

gpbkdf2 --passphrase=my-secret-passphrase --salt=my-secret-salt --digest-algorithm=sha512 --digest-rounds=10000 --length=128
0
Krzysztofa Krzysztof