Question 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 déjà suggéré de créer un mot de passe haché SHA-512? Je préférerais une ligne au lieu d'un script, mais si un script est la seule solution, c'est très bien aussi.

Mettre à jour

Remplacer les 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)))"

56
2017-11-11 11:14


origine


SHA et MD5 sont ne pas cryptage. Ils sont des algorithmes de hachage. La différence cruciale est que les données hachées ne sont pas récupérables. Que devez-vous faire? - SmallClanger
Je vous remercie. Modifié la question. man 5 shadow se réfère à lui comme "mot de passe crypté" alors je suis allé avec ce terme. - Belmin Fernandez
Toutes mes excuses si c'était un peu sournois. Essayez-vous de générer manuellement des hachages de mots de passe compatibles avec les ombres? Si oui, jetez un oeil à votre /etc/shadow Contenu. Tu verras $x$salt$hash. x désigne l'algorithme utilisé par crypt, avec 6 étant typique des linux modernes, qui est sha512 (voir man 3 crypt). L'une ou l'autre des réponses ci-dessous produira le même hash, à condition de lui donner le même sel. - SmallClanger
Oh non, pas sarcastique du tout. Vous avez clarifié quelque chose qui me rendait confus alors je suis très reconnaissant, monsieur! - Belmin Fernandez
Je vous remercie! Le système basé sur passlib est le seul que j'ai pu faire fonctionner sous OS X. - Stig Brautaset


Réponses:


Voici un one liner:

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

Python 3.3+ comprend mksalt dans la crypte, ce qui rend beaucoup plus facile (et plus sûr) d’utiliser:

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

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

L'identifiant 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 la glibc 2.7)
  • 6 -> SHA-512 (depuis la glibc 2.7)

Je vous conseillerais de rechercher ce que sont les sels et commenter ainsi que les petits exploitants commentent la différence entre le cryptage et le hachage.

Mise à jour 1: la chaîne produite convient aux scripts shadow et kickstart. Mise à jour 2: Avertissement. Si vous utilisez un Mac, voyez le commentaire sur son utilisation en python sur un Mac où cela ne semble pas fonctionner comme prévu.


62
2017-11-11 11:29



Importer le getpass et pwd modules n'est pas nécessaire. - akaihola
Remplacer random_salt avec un sel aléatoire réel. - Belmin Fernandez
Je ne peux pas obtenir que cela fonctionne à Yosemite. C'est ce que ça crache: $6asQOJRqB1i2 - Cela ne semble pas presque assez long pour être correct! - Stig Brautaset
Laissez le module de cryptage faire le sel pour vous: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))' - rrauenza
@kasperd j'aurais dû regarder le docs; c'est dans 3.3+ - Nick T


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

mkpasswd -m sha-512
mkpasswd -m md5

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

mkpasswd -m help 

HTH


35
2017-07-23 09:22



Quel paquet le fournit? Il y a un mkpasswd programme (partie de expect) sous Fedora aussi, mais c'est inutile à cet effet. - Cristian Ciupitu
Comme il l'a dit, la version de mkpasswd il parle est pour Debian / Ubuntu. le mkpasswd sur Fedora (au moins 14) manque la -m commutateur. - slm
Curieusement, c’est le paquet whois, héritage de Debian. Voir dpkg -S /usr/bin/mkpasswd Je ne pouvais pas y croire moi-même: D - Rbjz
Pour vérifier un mot de passe, si le premier chiffre est 6, utilisez la partie comprise entre le deuxième et le troisième dollar comme sel. Par exemple pour root:$6$AbCdE$xyz:... Tu devrais utiliser: mkpasswd -m sha-512 -S AbCdE. Avec le mot de passe correct, vous devriez obtenir le même hash. - Luc


Meilleure réponse: grub-crypt

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)**

24
2017-10-03 20:26



Solution simple..fonctionné pour moi sur CentOS 6. - Banjer
Sur les systèmes qui ont le grub-crypt commande, c’est le moyen le plus simple et le plus pratique de le faire. Aucun sens de jouer avec les sels manuellement quand vous pourriez le foirer. Le problème est que de plus en plus de systèmes modernes ont GRUB2 et n'incluront donc pas cette commande. - rsaw


Voici un code C court pour générer le mot de passe SHA-512 sur différents systèmes d'exploitation de type Unix.

Fichier: 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

usage:

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

8
2018-02-13 10:03



Cette question a 3 ans ... - Grumpy
Ce commentaire n'est pas si vieux. Jolie application que vous avez là-bas, ce n'est que c réponse il 1up même alors qu'il ressemble à exemple de page de manuel :) - Sampo Sarrala


Perl solution one-liner pour générer le mot de passe haché SHA-512:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

Travaillé sur RHEL 6


4
2018-05-23 02:26





Pourquoi ne pas effectuer la vérification et la modification suivantes sur les machines Centos / RHEL pour vous assurer que tout le hachage du mot de passe pour / etc / shadow est effectué avec sha512. Ensuite, vous pouvez simplement définir votre mot de passe normalement avec la commande passwd

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

2
2017-11-11 14:34





Voici un one-liner qui utilise des commandes shell pour créer un mot de passe haché SHA-512 avec un sel aléatoire:

[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $ (openssl rand -base64 16 | tr -d '+ =' | head -c 16)

Remarques

  1. Vous devrez peut-être installer le paquet "whois" (Debian, SuSE, etc.), qui fournit "mkpasswd".
  2. Voir crypt (3) pour plus de détails sur le format des lignes dans "/ etc / shadow".

2
2018-02-14 23:10



Malheureusement le whois paquet de Fedora 18 ne fournit aucune mkpasswd. - Cristian Ciupitu
Dans Arch Linux: / usr / bin / mkpasswd appartient à expect 5.45-3 - Nowaker
Même chose sur Fedora 20 et ça fait autre chose. - Cristian Ciupitu
Malheureusement, la commande suggérée a deux problèmes: 1) Le mot de passe fourni est maintenant stocké dans l'historique de votre shell et est visible par toute personne disposant de la commande 'history' ou similaire. 2) Vous n'avez pas besoin de fournir le sel aléatoire sur la ligne de commande - et je pense que vous devriez laisser mkpasswd le faire pour vous plutôt que d'utiliser des astuces funky openssl. (Notez que ceci est vrai au moins sur Ubuntu Quantal. Vous pouvez le tester en exécutant plusieurs fois 'mkpasswd -m sha-512 foo'. Vous verrez les changements de sel. Le sel est la valeur entre les 2ème et 3ème caractères $. ) - oskarpearson


Lisez le commentaire ci-dessous pour en savoir plus sur les implications de cette réponse pour la sécurité.

Pour ceux de la mentalité Ruby, voici un one-liner:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

2
2018-02-17 20:42



Ceci est inexact: la fonction rand de Ruby n’est pas sécurisée - elle utilise un PRNG. Elle générera donc des résultats qui peuvent être inversés en fonction de l’heure / de l’état du moment où vous avez exécuté cette tâche. - oskarpearson


Les algues HASH servent à la production de résumés MESSAGE, ils ne conviennent jamais aux mots de passe, qui doivent utiliser une sorte de HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - voir PBKDF2 ou BCrypt


0
2017-07-30 09:05



Bon point, mais man crypt me dit que PBKDF2 n'est pas supporté. - Huygens


#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

Vous pouvez le cloner depuis mon dépôt github si vous voulez: https://github.com/antoncohen/mksha


0
2018-02-14 23:23





Ce n'est pas un one-liner, mais cela pourrait aider quelqu'un:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)

0
2018-02-22 15:53



random n'est pas cryptographiquement sécurisé, os.urandom Devrait être utilisé. 8 caractères d'un dictionnaire de 56 caractères, c'est trop peu. Concaténer une piqûre encore et encore en python est aussi une mauvaise forme (complexité O (n ^ 2)) - Hubert Kario