Come creare hash di password SHA512 sulla riga di comando


83

In Linux posso creare un hash di password SHA1 usando sha1pass mypassword. Esiste uno strumento da riga di comando simile che mi consente di creare sha512hash? Stessa domanda per Bcrypte PBKDF2.


Non intendi sha1sum?

1
@Tichodroma no, in realtà esiste un sha1passcomando, parte del pacchetto comune syslinux su Debian.
derobert,

2
C'è un sha512sumcomando che fa parte di coreutils e in modo simile openssl sha512- ma nemmeno le cose extra che lo sha1passfanno.
Keith Thompson,

Risposte:


55

Sì, stai cercando mkpasswd, che (almeno su Debian) fa parte del whoispacchetto. Non chiedere perché ...

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

Sfortunatamente, la mia versione almeno non fa bcrypt. Se la tua libreria C lo fa, dovrebbe (e la manpage fornisce un'opzione -R per impostare la forza). -R funziona anche su sha-512, ma non sono sicuro se il suo PBKDF-2 o meno.

Se devi generare password bcrypt, puoi farlo in modo abbastanza semplice con il Crypt::Eksblowfish::Bcryptmodulo Perl.


70

Su qualsiasi distribuzione Red Hat come Fedora, CentOS o RHEL il comando mkpasswdnon include lo stesso set di opzioni della versione generalmente inclusa in Debian / Ubuntu.

NOTA: il comando mkpasswdfa effettivamente parte del expectpacchetto e probabilmente dovrebbe essere evitato. Puoi scoprire a quale pacchetto appartiene con uno di questi comandi.

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

Esempio

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

Entrambi questi metodi sono superiori all'utilizzo rpmpoiché i pacchetti non devono essere installati per individuare */mkpasswd.

soluzioni alternative

Per ovviare a questo problema, puoi utilizzare le seguenti linee guida Python o Perl per generare password SHA-512. Si noti che questi sono salati:

Python (> = 3.3)

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

-o programmato-

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

Python (2.xo 3.x)

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

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

Nota: $ 6 $ indica sha512. Il supporto per questo metodo per specificare l'algoritmo dipende dal supporto nella funzione di libreria crypt (3) a livello di sistema operativo (di solito in libcrypt). Non dipende dalla versione di Python.

Perl

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

In questi esempi la password è la stringa "password" e il sale è "saltsalt". Entrambi gli esempi utilizzano $ 6 $, il che indica che si desidera che crypt usi SHA-512.


2
Per il Python one-liner, puoi usare crypt.mksalt(crypt.METHOD_SHA512)per generare il sale invece di usarne uno fisso.
Jake Cobb,

2
@JakeCobb crypt.mksaltè disponibile solo in Python 3.x
Riccardo Murri,

2
Prima di digitare una password in chiaro nella riga di comando, assicurarsi di aver impostato "ignorespace" in HISTCONTROL (ovvero, farlo prima su CentOS / RHEL: echo 'export HISTCONTROL = "ignoredups: ignorespace"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh). Altrimenti, verrà salvato nella tua ~ / .bash_history.
Patrick,

3
il perl (e presumibilmente il python) usa la funzione di sistema "crypt". Quindi non sono portatili, richiedono una funzione crypt che capisca il tipo di hash richiesto. La cripta OSX no - mi restituisce solo una stringa crittografata DES vecchio stile.
Dan Pritts,

1
@RiccardoMurri Ho Python 2.7.5 e ho accesso a crypt.mksaltCentOS 7.1
user12345

15

È possibile utilizzare l' doveadmutilità, inclusa nel dovecotpacchetto.

doveadm pw -s SHA512-CRYPT

Esempio di risultato:

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

Basta tagliare {SHA512-CRYPT} e otterrai la tua stringa hash SHA512.


Non funziona per me come utente normale:doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
jotik l'

12

Esegui questo comando:

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

quindi inserisci la parola che desideri venga cancellata.


-bash: / sbin / grub-crypt: nessun file o directory simile
Will Sheppard,

Non credo che grub sia su c7, quindi puoi usare: python -c 'import crypt, getpass; print (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512))) '
ucemike

3

Per espandere le soluzioni alternative di @ slm sopra, se sei preoccupato che qualcuno ottenga una sospensione della tua cronologia bash e veda la password in testo semplice, puoi inserire raw_input()nell'istruzione python dove vanno i campi salt e password in modo che te lo richiedano. Il testo non viene mascherato durante la digitazione, ma non verrà visualizzato nella cronologia di Bash. Potresti anche avviare il comando con uno spazio iniziale, ma dimentico sempre di farlo.

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

2
Puoi anche configurare bashper non registrare comandi con prefisso con uno spazio che si aggiunge HISTCONTROL=ignorespaceal tuo .bashrcfile. Quando si esegue un comando che si desidera escludere dalla cronologia, digitare semplicemente uno spazio, quindi il comando effettivo.
theillien,

1

sha512 htpasswd

Comando che richiede l'utente e la password e genera un normale file htpasswd:

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

Funziona con tutte le versioni di Python> 2.5.


1

OpenSSL ha

openssl passwd -6

La guida dice:

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

0

Se stai usando il metodo Python (> = 2.7) dalla risposta del sim e vuoi confermare la tua password prima che venga generata - perché hai le password fat finger ...

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

Nella versione del 29 novembre 2017 di questa risposta, dice che funziona con Python 2.7 (o successivo). Il modulo crypt di python2.7 non ha mksalt (). Inoltre penso che tu voglia la chiamata crypt.mksalt () come seconda arg a crypt.crypt () (paren vicino mal posizionato?).
Juan

0

Versione di OpenSl "OpenSSL 1.1.1" su Linux e versione di OpenSL "LibreSSL 2.6.5" su supporto MacOS md5_crypt.

Esegui e inserisci la password:

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

o fornire la password in testo semplice direttamente alla CLI:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>

-12

Puoi usare sha512sum:

echo "password" | sha512sum

24
Questa risposta non è corretta Il comando non genererà un hash di password SHA-512 valido . Calcolerà semplicemente il checksum della password stringa \ n (nota che alla fine c'è anche una nuova riga). Gli hash delle password Unix sono salati e includono un codice versione hash tra due simboli "$". Vedi la risposta di @slm.
zorlem,

Più specificamente, il problema è che mentre la password è alquanto offuscata, questo metodo è vulnerabile a un attacco en.wikipedia.org/wiki/Rainbow_table .
Depresso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.