71 votes

Comment créer un mot de passe haché SHA-512 pour shadow ?

Les questions SF précédentes que j'ai vues ont conduit à des réponses qui produisent un mot de passe haché MD5.

Quelqu'un a-t-il une suggestion pour produire un mot de passe haché SHA-512 ? Je préférerais une ligne unique plutôt qu'un script mais, si un script est la seule solution, c'est bien aussi.

Mise à jour

Remplacement des versions précédentes de py2 par celle-ci :

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

75voto

Carling Points 229

Edit : Veuillez noter que cette réponse date de plus de 10 ans.

Voilà une réplique :

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

Python 3.3+ comprend mksalt dans la crypte ce qui rend son utilisation beaucoup plus facile (et plus sûre) :

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

Si vous ne fournissez pas d'argument pour crypt.mksalt (il pourrait accepter crypt.METHOD_CRYPT , ...MD5 , SHA256 et SHA512 ), il utilisera le plus fort disponible.

L'ID du hash (numéro après le premier $ ) est liée à la méthode utilisée :

  • 1 -> MD5
  • 2a -> Blowfish (pas dans la glibc principale ; ajouté dans certaines distributions Linux)
  • 5 -> SHA-256 (depuis glibc 2.7)
  • 6 -> SHA-512 (depuis glibc 2.7)

Je vous recommande de vous renseigner sur ce que sont les sels et sur la différence entre le cryptage et le hachage, comme le disait Smallclamger.

Mise à jour 1 : La chaîne produite est adaptée aux scripts shadow et kickstart scripts.
Mise à jour 2 : Avertissement . Si vous utilisez un Mac, consultez le commentaire sur l'utilisation de cette fonction en Python sur un Mac, où elle ne semble pas fonctionner comme prévu.

Sous macOS, vous devez no utiliser les versions ci-dessus, car Python utilise la version du système de crypt() dont ne se comporte pas de la même manière et utilise un cryptage DES non sécurisé. . Vous pouvez utiliser ce one liner indépendant de la plateforme (nécessite passlib - installer avec pip3 install passlib ):

python3 -c 'import passlib.hash; print(passlib.hash.sha512_crypt.hash("test"))'

40voto

Peter Points 251

Sous Debian, vous pouvez utiliser mkpasswd pour créer des mots de passe avec différents algorithmes de hachage adaptés à /etc/shadow. Il est inclus dans le paquet whois (d'après apt-file)

mkpasswd -m sha-512
mkpasswd -m md5

pour obtenir une liste des types d'algorithmes de hachage disponibles :

mkpasswd -m help 

HTH

25voto

Wayne Points 251

Meilleure réponse : Grub-cryptage

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

14voto

PeeEemEe Points 1

Voici un court code C pour générer le mot de passe SHA-512 sur divers OS de type Unix.

Dossier : passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

à compiler :

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

l'usage :

passwd-sha512 <password> <salt (16 chars max)>

9voto

mivk Points 3226

Il est surprenant qu'aucune réponse ne suggère la simple openssl passwd avec la commande -6 option. Peut-être n'était-elle pas encore disponible en 2011 ?

Si vous ne vous souciez pas de fournir le mot de passe sur la ligne de commande (au risque qu'il reste dans l'historique des commandes), vous pouvez le faire :

openssl passwd -6 YourPassword

Il va générer le sel, et sortir une ligne comme celle-ci :

$6$/57kpVAA/kuPUtzV$Ugxo0RTL2uXCvU7WH43c1qn0quMy2ve.qiBYJPG75tFgTN8gI5Jp/FYPXFOzIsASqVTqM42kjN2805VYLHKzm1

Avec le stdin il peut également lire le mot de passe à partir de STDIN (ou d'un fichier), afin de ne pas le laisser dans l'historique :

openssl passwd -6 -stdin

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X