Vraag Hoe maak je een SHA-512-hash-wachtwoord voor schaduw?


De eerdere SF-vragen die ik heb gezien, hebben geleid tot antwoorden die een MD5-hash-wachtwoord produceren.

Heeft iemand een suggestie om een ​​SHA-512-hash-wachtwoord te produceren? Ik geef de voorkeur aan een voering in plaats van een script, maar als een script de enige oplossing is, is dat ook prima.

Bijwerken

Vervanging van eerdere py2-versies door deze:

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

56
2017-11-11 11:14


oorsprong


SHA en MD5 zijn niet encryptie. Het zijn hashing-algoritmen. Het cruciale verschil is dat de gehashte gegevens niet kunnen worden hersteld. Wat moet je doen? - SmallClanger
Dank je. Heeft de vraag gewijzigd. man 5 shadow verwijst naar het als "gecodeerd wachtwoord" dus ging ik mee met die term. - Belmin Fernandez
Excuses als dat een beetje snarky was. Probeert u handmatig schaduw-compatibele wachtwoordhashes te genereren? Zo ja, kijk eens naar uw /etc/shadow inhoud. Je zult het zien $x$salt$hash. x geeft het algoritme aan gebruikt door crypt, met 6 typisch zijn voor moderne linuxes, wat sha512 is (zie man 3 crypt). Een van de onderstaande antwoorden zal dezelfde hasj produceren, zolang je het maar hetzelfde zout geeft. - SmallClanger
Oh nee, helemaal niet sneaky. U verduidelijkte iets waarover ik verward was, dus ik ben erg dankbaar meneer! - Belmin Fernandez
Dank je! De passlib-gebaseerde is de enige die ik heb kunnen gebruiken voor OS X. - Stig Brautaset


antwoorden:


Hier is een voering:

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

Python 3.3+ omvat mksalt in crypte, waardoor het veel gemakkelijker (en veiliger) is om te gebruiken:

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

Als u geen argument opgeeft crypt.mksalt (het zou kunnen accepteren crypt.METHOD_CRYPT, ...MD5, SHA256, en SHA512), zal het de sterkst beschikbare gebruiken.

De ID van de hash (nummer na de eerste $) is gerelateerd aan de gebruikte methode:

  • 1 -> MD5
  • 2a -> Blowfish (niet in mainline glibc; toegevoegd in sommige Linux-distributies)
  • 5 -> SHA-256 (sinds glibc 2.7)
  • 6 -> SHA-512 (sinds glibc 2.7)

Ik raad je aan om op te zoeken wat zouten zijn en dergelijke en per kleinklinkers het verschil te vermelden tussen versleuteling en hashing.

Update 1: De geproduceerde string is geschikt voor schaduw- en kickstart-scripts. Update 2: Waarschuwing. Als u een Mac gebruikt, raadpleegt u de opmerking over het gebruik van deze in python op een mac waar deze niet lijkt te werken zoals verwacht.


62
2017-11-11 11:29



Het importeren van getpass en pwd modules is niet nodig. - akaihola
Vervangen random_salt met een echt willekeurig zout. - Belmin Fernandez
Ik kan dit niet laten werken in Yosemite. Dit is wat het uitspuugt: $6asQOJRqB1i2 - dat lijkt niet lang genoeg om correct te zijn! - Stig Brautaset
Laat de crypt-module het zout voor je maken: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))' - rrauenza
@kasperd Ik had naar de docs; het is in 3.3+ - Nick T


Op Debian kunt u gebruiken mkpasswd  om wachtwoorden te maken met verschillende hashing-algoritmen die geschikt zijn voor / etc / shadow. Het is inbegrepen in het pakket whois (volgens apt-bestand)

mkpasswd -m sha-512
mkpasswd -m md5

om een ​​lijst met beschikbare hashing algoritms te krijgen:

mkpasswd -m help 

HTH


35
2017-07-23 09:22



Welk pakket biedt het? Er is een mkpasswd programma (onderdeel van de verwachting) ook onder Fedora, maar het is nutteloos voor dit doel. - Cristian Ciupitu
Zoals hij zei, de versie van mkpasswd waar hij het over heeft, is voor Debian / Ubuntu. De mkpasswd op Fedora (tenminste tot 14) mist het -m schakelaar. - slm
Vreemd genoeg is dit het whois-pakket, een erfenis van Debian. Zien dpkg -S /usr/bin/mkpasswd Ik kon het zelf niet geloven: D - Rbjz
Als je een wachtwoord wilt controleren, gebruik je als eerste het cijfer tussen de tweede en derde dollar als zout. Bijvoorbeeld voor root:$6$AbCdE$xyz:... je zou ... moeten gebruiken: mkpasswd -m sha-512 -S AbCdE. Met het juiste wachtwoord zou je dezelfde hash moeten krijgen. - Luc


Beste antwoord: 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



Eenvoudige oplossing ... werkte voor mij op CentOS 6. - Banjer
Op systemen met de grub-crypt opdracht, dit is echt de meest waterdichte en handige manier om het te doen. Het heeft geen zin om met zouten handmatig te spelen als je het zou verknallen. Het probleem is dat steeds meer moderne systemen GRUB2 hebben en dus deze opdracht niet opnemen. - rsaw


Hier is een korte C-code om het SHA-512-wachtwoord te genereren op verschillende Unix-type-besturingssystemen.

Het 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;
}

compileren:

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

gebruik:

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

8
2018-02-13 10:03



Deze vraag is 3 jaar oud ... - Grumpy
Deze opmerking is niet zo oud. Leuke app die je daar hebt, dat is alleen c antwoord daar 1up zelfs terwijl het eruit ziet als man pagina voorbeeld :) - Sampo Sarrala


Perl one-liner-oplossing om een ​​SHA-512-hash-wachtwoord te genereren:

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

Heeft gewerkt aan RHEL 6


4
2018-05-23 02:26





Waarom voert u de volgende controle en aanpassing niet uit op Centos / RHEL-machines om ervoor te zorgen dat alle wachtwoordhashing voor / etc / shadow wordt uitgevoerd met sha512. Dan kun je gewoon je passworkd normaal instellen met de opdracht 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





Hier is een one-liner die shell-opdrachten gebruikt om een ​​SHA-512-hash-wachtwoord te maken met een willekeurig zout:

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

Notes

  1. Mogelijk moet u het pakket "whois" (Debian, SuSE, enz.) Installeren dat "mkpasswd" biedt.
  2. Zie crypt (3) voor details over het formaat van regels in "/ etc / shadow".

2
2018-02-14 23:10



Helaas, de whois pakket van Fedora 18 biedt geen mkpasswd. - Cristian Ciupitu
In Arch Linux: / usr / bin / mkpasswd is eigendom van verwacht 5.45-3 - Nowaker
Hetzelfde op Fedora 20 en het doet iets anders. - Cristian Ciupitu
Helaas heeft de voorgestelde opdracht twee problemen: 1) Het meegeleverde wachtwoord is nu opgeslagen in de geschiedenis van uw shell en is zichtbaar voor iedereen met de opdracht 'history' of iets dergelijks. 2) Je hoeft het willekeurige zout niet op de opdrachtregel te zetten - en ik vind dat je mkpasswd het voor je moet laten doen in plaats van funky openssl-trucs te gebruiken. (Merk op dat dit waar is in ieder geval op Ubuntu Quantal) Je kunt het testen door 'mkpasswd-m sha-512 foo' meerdere keren uit te voeren.Je zult de zoutveranderingen zien.Het zout is de waarde tussen de 2e en 3e $ tekens. ) - oskarpearson


Lees de onderstaande opmerking om meer te weten te komen over de beveiligingsimplicaties van dit antwoord

Voor degenen met de Ruby-mindset is hier een one-liner:

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

2
2018-02-17 20:42



Dit is incorrect: de randfunctie van Ruby is niet beveiligd - het gebruikt een PRNG, dus dit zal resultaten genereren die reverse-engineered kunnen zijn op basis van een schatting van de tijd / staat van het moment dat je dit deed. - oskarpearson


HASH-algos zijn voor het produceren van MESSAGE-digesties, ze zijn nooit geschikt voor wachtwoorden, die een soort HKDF zouden moeten gebruiken ( http://tools.ietf.org/rfc/rfc5869.txt ) - zie PBKDF2 of BCrypt


0
2017-07-30 09:05



Goed punt, maar man crypt vertelt me ​​PBKDF2 wordt niet ondersteund. - 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

Je kunt het vanuit mijn github repo klonen als je wilt: https://github.com/antoncohen/mksha


0
2018-02-14 23:23





Het is geen one liner, maar het kan iemand helpen:

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 is niet cryptografisch veilig, os.urandom zou gebruikt moeten worden. 8 tekens uit een 56-tekens lang woordenboek zijn ook veel te weinig. Een pyromaan steeds weer opnieuw bekritiseren is ook een slechte vorm (het heeft O (n ^ 2) complexiteit) - Hubert Kario