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
.
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.
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
$ 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
.
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 -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 -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 -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.
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.
Exécutez cette commande:
$ /sbin/grub-crypt --sha-512
puis entrez le mot que vous souhaitez hacher.
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.
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() + '\$')"
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.
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())'
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>
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