Comment créer des hachages de mots de passe SHA512 en ligne de commande

83

Sous Linux, je peux créer un hachage de mot de passe SHA1 avec sha1pass mypassword. Existe-t-il un outil de ligne de commande similaire qui me permet de créer des sha512hachages? Même question pour Bcryptet PBKDF2.

étudiant
la source
Tu ne veux pas dire sha1sum?
1
@Tichodroma non, il y a en fait une sha1passcommande, faisant partie du paquet syslinux-common sur Debian.
derobert
2
Il y a une sha512sumcommande qui fait partie de coreutils, et de la même manière openssl sha512- mais les choses supplémentaires qui le font sha1passne le font pas non plus.
Keith Thompson

Réponses:

55

Oui, vous recherchez mkpasswdce qui (du moins sur Debian) fait partie du whoispaquet. Ne demande pas pourquoi ...

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

Malheureusement, ma version du moins ne fonctionne pas avec bcrypt. Si votre bibliothèque C le fait, cela devrait (et la page de manuel donne une option -R pour définir la force). -R fonctionne également sur sha-512, mais je ne sais pas si c'est PBKDF-2 ou non.

Si vous devez générer des mots de passe bcrypt, vous pouvez le faire assez simplement avec le Crypt::Eksblowfish::Bcryptmodule Perl.

derobert
la source
70

Sur toutes les distributions Red Hat telles que Fedora, CentOS ou RHEL, la commande mkpasswdn'inclut pas le même ensemble de commutateurs que la version généralement fournie avec Debian / Ubuntu.

REMARQUE: La commande mkpasswdfait en réalité partie du expectpackage et doit probablement être évitée. Vous pouvez trouver à quel paquet il appartient avec l'une de ces commandes.

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

Exemple

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

Ces deux méthodes sont supérieures à l'utilisation rpmcar il n'est pas nécessaire d'installer les packages pour les localiser */mkpasswd.

Solutions de contournement

Pour contourner ce problème, vous pouvez utiliser les one-liners Python ou Perl suivants pour générer des mots de passe SHA-512. Prenez note que ceux-ci sont salés:

Python (> = 3.3)

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

-ou 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/

Remarque: 6 $ désignent sha512. La prise en charge de cette méthode de spécification de l’algorithme dépend de la prise en charge de la fonction de bibliothèque crypt (3) au niveau du système d’exploitation (généralement dans libcrypt). Il ne dépend pas de la version de Python.

Perl

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

Dans ces exemples, le mot de passe est la chaîne "password" et le sel est "selsalt". Les deux exemples utilisent $ 6 $, ce qui indique que vous voulez que crypt utilise SHA-512.

slm
la source
2
Pour le python one-liner, vous pouvez utiliser crypt.mksalt(crypt.METHOD_SHA512)pour générer le sel au lieu d’en utiliser un fixe.
Jake Cobb
2
@JakeCobb crypt.mksaltest uniquement disponible en Python 3.x
Riccardo Murri le
2
Avant de saisir un mot de passe en texte clair sur la ligne de commande, assurez-vous que vous avez défini "ignorespace" dans HISTCONTROL (c’est-à-dire que vous devez le faire d’abord sur CentOS / RHEL: echo 'export HISTCONTROL = "ignoredups: ignorespace"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh). Sinon, il sera enregistré dans votre ~ / .bash_history.
Patrick
3
le perl (et vraisemblablement le python) utilise la fonction système "crypt". Donc, ils ne sont pas portables, ils nécessitent une fonction de cryptage qui comprend le type de hachage demandé. La cryptographie OSX ne le fait pas - elle me restitue simplement une chaîne cryptée par DES à l'ancien style.
Dan Pritts
1
@RiccardoMurri J'ai Python 2.7.5 et j'ai accès à crypt.mksaltCentOS 7.1
user12345
15

Vous pouvez utiliser l' doveadmutilitaire inclus dans le dovecotpackage.

doveadm pw -s SHA512-CRYPT

Exemple de résultat:

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

Il suffit de couper {SHA512-CRYPT} et vous obtiendrez votre chaîne hachée SHA512.

Obohovyk
la source
Ne fonctionne pas pour moi en tant qu'utilisateur régulier: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

Exécutez cette commande:

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

puis entrez le mot que vous voulez haché.

Ucemike
la source
-bash: / sbin / grub-crypt: Aucun fichier ou répertoire de ce type
Will Sheppard
Je ne crois pas que grub soit sur c7, vous pouvez donc utiliser: python -c 'import crypt, getpass; impression (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512))) »
ucemike
3

Pour développer les solutions de contournement @ slm ci-dessus, si vous craignez que quelqu'un arrête votre historique de bash et visualise le mot de passe en texte brut, vous pouvez insérer raw_input()dans la déclaration python l'emplacement où se trouvent les champs sel et mot de passe afin de vous y inviter. Le texte n'est pas masqué lorsque vous tapez, mais il n'apparaîtra pas dans votre historique de bash. Vous pouvez également démarrer la commande avec un espace de début, mais j'oublie toujours de le faire.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"
utilisateur208145
la source
2
Vous pouvez également configurer bashpour ne pas enregistrer les commandes préfixées avec un espace ajoutant HISTCONTROL=ignorespaceà votre .bashrcfichier. Lorsque vous exécutez une commande que vous souhaitez exclure de votre historique, tapez simplement un espace puis la commande réelle.
theillien
1

sha512 htpasswd

Commande qui demande un utilisateur et un mot de passe et génère un fichier htpasswd normal:

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

Fonctionne avec toutes les versions de python> 2.5.

MadMike
la source
1

OpenSSL a

openssl passwd -6

L'aide dit:

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

Si vous utilisez la méthode Python (> = 2.7) de la réponse de sim et que vous souhaitez confirmer votre mot de passe avant qu'il ne soit généré - car vous avez le gros mot de passe ...

$ 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
la source
Dans la version du 29 novembre 2017 de cette réponse, il est indiqué que cela fonctionne pour Python 2.7 (ou version ultérieure). Le module crypt de python2.7 n'a pas mksalt (). De plus, je pense que vous voulez que l'appel crypt.mksalt () soit le deuxième argument de crypt.crypt () (égaré?).
Juan
0

La version "OpenSSL 1.1.1" sur Linux et la version "LibreSSL 2.6.5" sur Mac OS supportent md5_crypt.

Il suffit de courir et d'entrer le mot de passe:

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

ou fournissez le mot de passe en texte brut directement à la CLI:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>
TMT
la source
-12

Vous pouvez utiliser sha512sum:

echo "password" | sha512sum
Vinayak
la source
24
Cette réponse est incorrecte. La commande ne générera pas de hachage de mot de passe SHA-512 valide . Il calculera simplement la somme de contrôle du mot de passe de la chaîne \ n (notez qu’il existe également une nouvelle ligne à la fin). Les hachages de mots de passe Unix sont salés et incluent un code de version de hachage entre deux symboles "$". Voir la réponse de @slm.
Zorlem
Plus précisément, le problème est que, même si le mot de passe est quelque peu obscurci, cette méthode est vulnérable à une attaque en.wikipedia.org/wiki/Rainbow_table .
DepressedDaniel