web-dev-qa-db-fra.com

Comment créer des hachages de mot de passe SHA512 sur la ligne de commande

Sous Linux, je peux créer un hachage de mot de passe SHA1 en utilisant sha1pass mypassword. Existe-t-il un outil de ligne de commande similaire qui me permet de créer sha512 hachages? Même question pour Bcrypt et PBKDF2.

90
student

Oui, vous recherchez mkpasswd, qui (au moins sur Debian) fait partie du paquet whois. Ne demandez 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 au moins ne fait pas de bcrypt. Si votre bibliothèque C le fait, elle 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 son 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::Bcrypt Module Perl.

59
derobert

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

REMARQUE: La commande mkpasswd fait en fait partie du package expect et devrait probablement être évitée. Vous pouvez savoir à quel package 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 de rpm car les packages ne doivent pas être installés pour localiser */mkpasswd.

Solutions de contournement

Pour contourner ce problème, vous pouvez utiliser les éléments suivants Python ou Perl one-liners pour générer des mots de passe SHA-512. Notez 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ésigne le sha512. La prise en charge de cette méthode de spécification de l'algorithme dépend de la prise en charge dans 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 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 "mot de passe" et le sel est "sel salé". Les deux exemples utilisent $ 6 $ qui indique que vous voulez que crypt utilise SHA-512.

75
slm

Vous pouvez utiliser l'utilitaire doveadm, qui est inclus dans le package dovecot.

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.

16
obohovyk

Exécutez cette commande:

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

puis entrez le mot que vous souhaitez hacher.

12
ucemike

OpenSSL a

openssl passwd -6

L'aide dit:

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

Pour une sortie cohérente, vous pouvez spécifier le sel:

openssl passwd -6 -salt <YOUR_SALT>

La sortie est quelque chose de similaire à:

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

avec: 6 entre "$" indiquant l'algorithme ("-6" ci-dessus), suivi de YOUR_SALT et "$", se terminant par la somme SHA512.

3
Markus Linnala

Pour développer les solutions de contournement de @ slm ci-dessus, si vous craignez que quelqu'un accède à votre historique bash et voit le mot de passe en texte brut, vous pouvez insérer raw_input() dans le python = instruction où les champs sel et mot de passe vont donc il vous invite à les saisir. Le texte n'est pas masqué pendant que vous tapez, mais il n'apparaîtra pas dans votre historique bash. Vous pouvez également démarrer la commande avec un espace de début , mais j'oublie toujours de faire ça.

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

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 python> 2.5.

1
MadMike

Si vous utilisez la méthode Python (> = 2.7) à partir de la réponse de sim et que vous souhaitez confirmer votre mot de passe avant qu'il ne génère - parce que vous avez un gros mot de passe avec les doigts ...

$ 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

la version openssl "OpenSSL 1.1.1" sous Linux et la version openssl "LibreSSL 2.6.5" sous MacOS prennent en charge md5_crypt.

Il suffit d'exécuter 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>
0
TMT

PBKDF2

J'ai écrit une application simple dans Go qui permet de générer du hachage PBKDF2, car OpenSSL ne fournit pas d'outil de ligne de commande pour cela. Il prend en charge sha1, sha256, sha512 et md5.

Vous pouvez le construire vous-même, ou télécharger les binaires publiés dans la section "release".

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

L'utilisation est très simple:

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