So erstellen Sie SHA512-Kennwort-Hashes in der Befehlszeile

83

Unter Linux kann ich einen SHA1-Passwort-Hash mit erstellen sha1pass mypassword. Gibt es ein ähnliches Kommandozeilen-Tool, mit dem ich sha512Hashes erstellen kann ? Gleiche Frage für Bcryptund PBKDF2.

Student
quelle
Meinst du nicht sha1sum?
1
@Tichodroma Nein, es gibt tatsächlich einen sha1passBefehl, der Teil des unter Debian üblichen Syslinux-Pakets ist.
Derobert
2
Es gibt einen sha512sumBefehl, der Teil von coreutils ist, und ähnlich openssl sha512- aber auch nicht die zusätzlichen Dinge, die sha1passdazugehören.
Keith Thompson

Antworten:

55

Ja, Sie suchen mkpasswd, was (zumindest auf Debian) Teil des whoisPakets ist. Frag nicht warum ...

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

Leider macht meine Version zumindest kein bcrypt. Wenn dies in Ihrer C-Bibliothek der Fall ist, sollte dies der Fall sein (und die Manpage bietet die Option -R, um die Stärke festzulegen). -R funktioniert auch mit sha-512, aber ich bin mir nicht sicher, ob es PBKDF-2 ist oder nicht.

Wenn Sie bcrypt-Passwörter generieren müssen, können Sie dies ziemlich einfach mit dem Crypt::Eksblowfish::BcryptPerl-Modul tun .

derobert
quelle
70

Auf allen Red Hat-Distributionen wie Fedora, CentOS oder RHEL enthält der Befehl mkpasswdnicht die gleichen Switches wie die in Debian / Ubuntu normalerweise enthaltene Version.

HINWEIS: Der Befehl mkpasswdist tatsächlich Teil des expectPakets und sollte wahrscheinlich vermieden werden. Mit diesen Befehlen können Sie herausfinden, zu welchem ​​Paket es gehört.

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

Beispiel

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

Beide Methoden sind der Verwendung überlegen, rpmda die Pakete zum Suchen nicht installiert werden müssen */mkpasswd.

Problemumgehungen

Um dies zu umgehen, können Sie die folgenden Python- oder Perl-Einzeiler verwenden, um SHA-512-Kennwörter zu generieren. Beachten Sie, dass diese gesalzen sind:

Python (> = 3,3)

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

-oder gescriptet-

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

Python (2.x oder 3.x)

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

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

Hinweis: $ 6 $ bezeichnet sha512. Die Unterstützung dieser Methode zur Angabe des Algorithmus hängt von der Unterstützung der Bibliotheksfunktion crypt (3) auf Betriebssystemebene ab (normalerweise in libcrypt). Es ist nicht abhängig von der Python-Version.

Perl

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

In diesen Beispielen ist das Passwort die Zeichenfolge "Passwort" und das Salz ist "Salzsalz". In beiden Beispielen wird $ 6 $ verwendet, was bedeutet, dass Sie möchten, dass Crypt SHA-512 verwendet.

slm
quelle
2
Für den Python-Einzeiler können Sie crypt.mksalt(crypt.METHOD_SHA512)das Salz anstelle eines festen verwenden.
Jake Cobb
2
@JakeCobb crypt.mksaltist nur in Python 3.x verfügbar
Riccardo Murri
2
Vergewissern Sie sich vor der Eingabe eines Klartextkennworts in der Befehlszeile, dass in HISTCONTROL "Ignoranz" eingestellt ist (dh führen Sie dies zuerst unter CentOS / RHEL aus: echo 'export HISTCONTROL = "ignoredups: Ignoranz"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh). Andernfalls wird es in Ihrer ~ / .bash_history gespeichert.
Patrick
3
die perl (und vermutlich die python) benutzen die systemfunktion "crypt". Sie sind also nicht portierbar, sondern benötigen eine Kryptofunktion, die den angeforderten Hash-Typ versteht. Bei der OSX-Krypta ist das nicht der Fall - sie gibt mir nur eine DES-verschlüsselte Zeichenfolge im alten Stil zurück.
Dan Pritts
1
@ RiccardoMurri Ich habe Python 2.7.5 und habe Zugriff crypt.mksaltauf CentOS 7.1
user12345
15

Sie können das doveadmDienstprogramm verwenden, das im dovecotPaket enthalten ist.

doveadm pw -s SHA512-CRYPT

Ergebnis Beispiel:

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

Schneiden Sie einfach {SHA512-CRYPT} und Sie erhalten Ihren SHA512-Hash-String.

obohovyk
quelle
Funktioniert für mich als normaler Benutzer nicht: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
12

Führen Sie diesen Befehl aus:

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

Geben Sie dann das gewünschte Wort ein.

ucemike
quelle
-bash: / sbin / grub-crypt: Keine solche Datei oder Verzeichnis
Will Sheppard
Ich glaube nicht, dass grub auf c7 ist, also kannst du folgendes benutzen: python -c 'import crypt, getpass; print (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512)))
ucemike
3

Um die obigen Problemumgehungen von @ slm zu erweitern, können Sie raw_input()in die Python-Anweisung die Felder salt und password einfügen, wenn Sie befürchten, dass jemand Ihren Bash-Verlauf in den Griff bekommt und das Kennwort im Klartext anzeigt , sodass er Sie dazu auffordert. Der Text wird während der Eingabe nicht maskiert, jedoch nicht im Bash-Verlauf angezeigt. Sie können den Befehl auch mit einem führenden Leerzeichen beginnen, aber das vergesse ich immer.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"
user208145
quelle
2
Sie können auch festlegen bash, dass keine Befehle aufgezeichnet werden, denen ein Leerzeichen vorangestellt ist, HISTCONTROL=ignorespacedas Ihrer .bashrcDatei hinzugefügt wird. Wenn Sie einen Befehl ausführen, den Sie aus Ihrem Verlauf ausschließen möchten, geben Sie einfach ein Leerzeichen und dann den tatsächlichen Befehl ein.
Theillien
1

sha512 htpasswd

Befehl, der nach Benutzer und Passwort fragt und eine reguläre htpasswd-Datei erzeugt:

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

Funktioniert mit allen Python-Versionen> 2.5.

MadMike
quelle
1

OpenSSL hat

openssl passwd -6

Hilfe sagt:

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

Wenn Sie die Python (> = 2.7) -Methode aus der Antwort von sim verwenden und Ihr Passwort bestätigen möchten, bevor es generiert wird - weil Sie dicke Fingerpasswörter haben ...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'
levi
quelle
In der Version vom 29. November 2017 dieser Antwort heißt es, dass dies für Python 2.7 (oder höher) funktioniert. Das Crypt-Modul von python2.7 hat kein mksalt (). Außerdem möchte ich, dass crypt.mksalt () als zweites Argument crypt.crypt () aufruft (nahe Paren verlegt?).
Juan
0

openssl-Version "OpenSSL 1.1.1" unter Linux und openssl-Version "LibreSSL 2.6.5" unter MacOS unterstützen md5_crypt.

Einfach ausführen und Passwort eingeben:

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

oder geben Sie das Klartext-Passwort direkt in die CLI ein:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>
TMT
quelle
-12

Sie können verwenden sha512sum:

echo "password" | sha512sum
Vinayak
quelle
24
Diese Antwort ist falsch. Der Befehl generiert keinen gültigen SHA-512- Passwort- Hash. Es wird einfach die Prüfsumme des String-Passworts berechnet \ n (beachte, dass es am Ende auch eine neue Zeile gibt). Unix-Passwort-Hashes sind gesalzen und enthalten einen Hash-Versionscode zwischen zwei "$" -Symbolen. Siehe die Antwort von @slm.
Zorlem
Insbesondere besteht das Problem darin, dass das Kennwort zwar etwas verschleiert ist, diese Methode jedoch für einen en.wikipedia.org/wiki/Rainbow_table-Angriff anfällig ist .
DepressedDaniel