V Linuxu mohu vytvořit hash SHA1 pomocí sha1pass mypassword
. Existuje podobný nástroj příkazového řádku, který mi umožňuje vytvořit sha512
hashe? Stejná otázka pro Bcrypt
a PBKDF2
.
Ano, hledáte mkpasswd
, které (alespoň na Debianu) je součástí balíčku whois
. Neptej se proč ...
[email protected]:~$ mkpasswd -m help
Available methods:
des standard 56 bit DES-based crypt(3)
md5 MD5
sha-256 SHA-256
sha-512 SHA-512
Bohužel, moje verze alespoň nešifruje. Pokud vaše knihovna C ano, měla by (a manpage dává možnost -R nastavit sílu). -R také pracuje na sha-512, ale nejsem si jistý, jestli jeho PBKDF-2 nebo ne.
Pokud potřebujete generovat hesla bcrypt, můžete to udělat docela jednoduše pomocí Crypt::Eksblowfish::Bcrypt
Perl modul.
Na jakýchkoli distribucích Red Hat, jako je Fedora, CentOS nebo RHEL, příkaz mkpasswd
neobsahuje stejnou sadu přepínačů jako verze obvykle dodávaná s Debianem/Ubuntu.
POZNÁMKA: Příkaz mkpasswd
je ve skutečnosti součástí balíčku expect
a měl by se mu pravděpodobně vyhnout. Pomocí těchto příkazů můžete zjistit, k jakému balíčku patří.
$ 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
Obě tyto metody jsou lepší než použití rpm
, protože balíčky nemusí být nainstalovány, aby bylo možné najít */mkpasswd
.
Chcete-li tento problém vyřešit, můžete použít následující Python nebo Perl jednořádkové pro vygenerování hesel SHA-512).
$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
nebo skriptované-
$ 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/
Poznámka: $ 6 $ označuje sha512. Podpora této metody specifikace algoritmu je závislá na podpoře ve funkci knihovny Crypt (3) na úrovni OS (obvykle v libcrypt). Nezávisí na verzi python).
$ Perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/
V těchto příkladech je heslo řetězec „heslo“ a sůl je „sůl“. Oba příklady používají $ 6 $, což znamená, že chcete používat šifrování SHA-512.
Můžete použít nástroj doveadm
, který je součástí balíčku dovecot
.
doveadm pw -s SHA512-CRYPT
Příklad výsledku:
{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1
Stačí řezat {SHA512-CRYPT} a získáte řetězec hash SHA512.
Spusťte tento příkaz:
$ /sbin/grub-crypt --sha-512
potom zadejte slovo, které chcete hashovat.
OpenSSL má
openssl passwd -6
Nápověda říká:
$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
-6 SHA512-based password algorithm
Pro konzistentní výstup můžete určit sůl:
openssl passwd -6 -salt <YOUR_SALT>
Výstup je něco podobného:
$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.
s: 6
mezi „$“ označující algoritmus („-6“ výše), za kterým následuje YOUR_SALT
a "$", končící částkou SHA512.
Chcete-li rozbalit výše uvedená řešení @ slm, pokud se obáváte, že někdo získá vaši bash historii a uvidí heslo prostého textu, můžete vložit raw_input()
do python) = příkaz, kam se pole pro pole soli a hesla dostanou, takže vás o to požádá. Text není během psaní maskovaný, ale nezobrazí se ve vaší historii bash. Můžete také spustit příkaz s úvodním prostorem , ale já na to vždycky zapomenu.
python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"
Příkaz, který žádá uživatele a heslo a vygeneruje normální soubor htpasswd:
python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd
Pracuje se všemi python verze> 2.5.
Pokud používáte metodu Python (> = 2,7) ze simovy odpovědi a chcete potvrdit své heslo dříve, než se vygeneruje - protože hesla pro tlusté prsty ...
$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'
verze openssl „OpenSSL 1.1.1“ v systému Linux a verze openssl „LibreSSL 2.6.5“ v systému MacOS podporují md5_crypt.
Stačí spustit a zadat heslo:
openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>
nebo zadejte heslo prostého textu přímo do CLI:
openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>
Napsal jsem jednoduchou aplikaci v Go, která umožňuje generovat hash PBKDF2, protože OpenSSL k tomu neposkytuje nástroj příkazového řádku. Podporuje sha1, sha256, sha512 a md5.
Můžete si ji sami sestavit, nebo si můžete stáhnout uvolněné binární soubory v sekci „vydání“.
https://github.com/riotkit-org/gpbkdf2
Použití je velmi jednoduché:
gpbkdf2 --passphrase=my-secret-passphrase --salt=my-secret-salt --digest-algorithm=sha512 --digest-rounds=10000 --length=128