Como criar uma senha hash SHA-512 para shadow?

60

As perguntas anteriores do SF que eu vi levaram a respostas que produzem senha com hash MD5.

Alguém tem uma sugestão para produzir uma senha hash SHA-512? Eu prefiro um forro em vez de um script, mas, se um script é a única solução, tudo bem também.

Atualizar

Substituindo versões anteriores do py2 por esta:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
    
por Belmin Fernandez 11.11.2011 / 12:14

16 respostas

64

Aqui está um folheto:

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

O Python 3.3+ inclui mksalt na criptografia , o que facilita muito (e mais seguro) para usar:

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

Se você não fornecer um argumento para crypt.mksalt (ele pode aceitar crypt.METHOD_CRYPT , ...MD5 , SHA256 e SHA512 ), ele usará o mais strong disponível.

O ID do hash (número após o primeiro $ ) está relacionado ao método usado:

  • 1 - > MD5
  • 2a - > Blowfish (não em mainline glibc; adicionado em algumas distribuições Linux)
  • 5 - > SHA-256 (desde o glibc 2.7)
  • 6 - > SHA-512 (desde o glibc 2.7)

Eu recomendo que você procure o que são os sais e tal e como os smallclamgers comentam a diferença entre criptografia e hashing.

Atualização 1: A string produzida é adequada para scripts shadow e kickstart. Atualização 2: aviso. Se você estiver usando um Mac, veja o comentário sobre como usar isso em python em um mac onde ele não parece funcionar como esperado.

    
por 11.11.2011 / 12:29
35

No Debian você pode usar mkpasswd  para criar senhas com diferentes algoritmos de hash adequados para / etc / shadow. Está incluído no pacote whois (de acordo com o apt-file)

mkpasswd -m sha-512
mkpasswd -m md5

para obter uma lista do tipo de algoritmo de hashing disponível:

mkpasswd -m help 

HTH

    
por 23.07.2012 / 11:22
24

Melhor resposta: grub-crypt

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**
    
por 03.10.2012 / 22:26
11

Aqui está um pequeno código em C para gerar a senha do SHA-512 em vários sistemas operacionais do tipo Unix.

Arquivo: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

para compilar:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

uso:

passwd-sha512 <password> <salt (16 chars max)>
    
por 13.02.2014 / 11:03
4

Perl solução de uma linha para gerar senha hash SHA-512:

perl -le 'print crypt "desiredPassword", "\\$customSalt\$"'

Trabalhou no RHEL 6

    
por 23.05.2014 / 04:26
2

Por que não executar a verificação e modificação a seguir nas máquinas Centos / RHEL para garantir que todo o hashing de senha para / etc / shadow seja feito com o sha512. Então você pode simplesmente configurar seu passworkd normalmente com o comando passwd

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi
    
por 11.11.2011 / 15:34
2

Aqui está um one-liner que usa comandos shell para criar uma senha hash SHA-512 com um sal aleatório:

[root@host] mkpasswd -m sha-512 MyPAsSwOrD $(openssl rand -base64 16 | tr -d '+=' | head -c 16)

Notas

  1. Você pode precisar instalar o pacote "whois" (Debian, SuSE, etc.), que fornece "mkpasswd".
  2. Veja crypt (3) para detalhes sobre o formato de linhas em "/ etc / shadow".
por 15.02.2013 / 00:10
2

Leia o comentário abaixo para saber mais sobre as implicações de segurança desta resposta

Para aqueles da mentalidade Ruby, aqui está um verso:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))
    
por 17.02.2014 / 21:42
1

Este script funcionou para mim no Ubuntu 12.04 LTS: link

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

Tem os seguintes recursos que algumas das outras alternativas não possuem:

  • Ele gera seu sal com segurança. Ninguém deve confiar em fazer isso manualmente. Sempre.
  • ele não armazena qualquer coisa no histórico do shell.
  • para maior clareza, imprime qual senha do usuário foi gerada, o que pode ser bom ao gerar as senhas de muitos usuários.
por 22.09.2015 / 14:57
0
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

Você pode cloná-lo no meu repositório do github se desejar: link

    
por 15.02.2013 / 00:23
0

Não é um simples, mas pode ajudar alguém:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)
    
por 22.02.2013 / 16:53
0
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

Obviamente, você apenas pega o segundo campo, e pode deletar o arquivo uma vez que você o adiciona à sombra ou para uso com o sudo (ainda é provável que seja sombra).

    
por 18.06.2014 / 23:04
0

Dê uma olhada na página man de crypt (3) e acho que você descobrirá que a ferramenta crypt foi atualizada para usar glibc e sha256 ($ 5) e sha512 ($ 6), várias rodadas, sal muito maior, e assim por diante.

Claramente, o SHA512 é relevante para o funcionamento do / etc / shadow.

Dito isto, esta página web foi muito útil - em particular o MKPASSWD, já que isso resolveu o meu problema.

Dada uma senha potencialmente "perdida", posso usar o MKPASSWD e o salt, para gerar o hash SHA512 e confirmar / negar uma lista de senhas candidatas.

Eu usaria o John the ripper - mas pelo menos no meu hardware (Raspberry Pi) e meu orçamento (nada) - John não pode fazer isso (não parece suportar as coisas avançadas do crypt / glibc no free raspbian versão.

Lembre-se, já que eu tenho permissão suficiente para ler / escrever / etc / shadow, EU PODERIA apenas sobrescrever o hash e continuar com a vida ... este é um exercício acadêmico.

NOTAS    Notas da Glibc        A versão glibc2 desta função suporta criptografia adicional        algoritmos de análise.

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.
    
por 23.10.2016 / 01:43
0

Se você precisar de uma alternativa para os one-liners escritos em perl / python, o mkpasswd é uma boa combinação. Embora esteja incluído no pacote Debian whois, ele está faltando nos sistemas CentOS / RHEL. Eu modifiquei a versão Debian do mkpasswd e incluí um mecanismo de geração de sal mais strong baseado no OpenSSL. O binário resultante preserva totalmente todos os parâmetros da linha de comando da versão do Debian. O código está disponível no github e deve ser compilado em qualquer versão do Linux: mkpasswd

    
por 25.07.2018 / 09:24
0

Os algas HASH são para produzir os resumos MESSAGE, eles nunca são adequados para senhas, que devem usar algum tipo de HKDF ( link ) - consulte PBKDF2 ou BCrypt

    
por 30.07.2012 / 11:05
-4

Não sei ao certo como o SHA-512 está relacionado a /etc/shadow . Essas senhas são crypt ed.

Mas se você quiser uma senha com hash SHA-512, você pode fazer isso por echo -n the_password | sha512sum . Você não pode usar a saída para / etc / shadow.

    
por 11.11.2011 / 14:09