Як створити хеші паролів SHA512 в командному рядку


83

У Linux я можу створити хеш паролів SHA1 за допомогою sha1pass mypassword. Чи є подібний інструмент командного рядка, який дозволяє мені створювати sha512хеші? Те саме питання для Bcryptі PBKDF2.


Ви не маєте на увазі sha1sum?

1
@Tichodroma ні, насправді є sha1passкоманда, яка є частиною загального пакету syslinux на Debian.
дероберт

2
Існує sha512sumкоманда, яка є частиною coreutils, і так само openssl sha512- але також не виконує зайвих матеріалів sha1pass.
Кіт Томпсон

Відповіді:


55

Так, ви шукаєте mkpasswd, що (принаймні на Debian) є частиною whoisпакету. Не запитай, чому ...

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

На жаль, моя версія не принаймні bcrypt. Якщо ваша бібліотека C це робить, вона повинна (і вкладка дає опцію -R для встановлення сили). -R також працює на sha-512, але я не впевнений, його PBKDF-2 чи ні.

Якщо вам потрібно генерувати паролі bcrypt, ви можете це зробити досить просто за допомогою Crypt::Eksblowfish::Bcryptмодуля Perl.


70

У будь-якому з дистрибутивів Red Hat, таких як Fedora, CentOS або RHEL, команда mkpasswdне включає той самий набір комутаторів, як версія, що зазвичай входить до Debian / Ubuntu.

ПРИМІТКА . Команда mkpasswdфактично є частиною expectпакету, і, ймовірно, її слід уникати. Ви можете дізнатися, до якого пакету належить будь-яка з цих команд.

$ 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

Обидва ці способи відрізняються перевагою використання, rpmоскільки для їх пошуку не потрібно встановлювати пакети */mkpasswd.

Обхідні шляхи

Щоб вирішити це, ви можете використовувати наступні одношарові Python або Perl для створення паролів SHA-512. Зверніть увагу, що вони солоні:

Python (> = 3,3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

-і сценарій-

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'

Python (2.x або 3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\$6\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

Примітка: $ 6 $ позначає sha512. Підтримка цього методу вказівки алгоритму залежить від підтримки функцій бібліотеки криптів (3) рівня (3) (зазвичай в libcrypt). Це не залежить від версії python.

Perl

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

У цих прикладах паролем є рядок "пароль", а сіль - "сольовий соль". В обох прикладах використовується $ 6 $, що означає, що ви хочете, щоб крипта використовувала SHA-512.


2
Для однолінійного пітона пітона ви можете використовувати crypt.mksalt(crypt.METHOD_SHA512)для отримання солі замість використання фіксованого.
Джейк Кобб

2
@JakeCobb crypt.mksaltдоступний лише в Python 3.x
Ріккардо Муррі

2
Перш ніж набрати пароль із чітким текстом у командному рядку, переконайтеся, що у програмі HISTCONTROL встановлено "простір ігнорування" (тобто зробіть це спочатку на CentOS / RHEL: echo 'export HISTCONTROL = "ignoredups: ignorespace"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh). Інакше він збережеться у вашій ~ / .bash_history.
Патрік

3
perl (і, мабуть, пітон) використовують системну функцію "крипта". Тому вони не є портативними, їм потрібна функція криптовалюта, яка розуміє запитуваний хеш-тип. Криптовалюта OSX не має - вона просто повертає мені зашифровану рядок DES-зашифрованого стилю.
Dan Pritts

1
@RiccardoMurri У мене є Python 2.7.5 і маю доступ до crypt.mksaltCentOS 7.1
користувач12345

15

Ви можете скористатися doveadmутилітою, яка входить в dovecotкомплект.

doveadm pw -s SHA512-CRYPT

Приклад результату:

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1

Просто виріжте {SHA512-CRYPT}, і ви отримаєте хешований рядок SHA512.


Не працює для мене як звичайного користувача:doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
jotik

12

Виконайте цю команду:

$ /sbin/grub-crypt --sha-512

потім введіть слово, яке ви хочете хеширувати.


-bash: / sbin / grub-crypt: Немає такого файлу чи каталогу
Буде Шеппард

Я не вірю, що grub працює на c7, тому ви можете використовувати: python -c 'import crypt, getpass; print (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512))) '
ucemike

3

Щоб розширити вирішення методів @ slm вище, якщо ви переживаєте за те, щоб хтось захопився вашою історією bash та побачив звичайний текстовий пароль, ви можете вставити raw_input()в заяву python, куди йдуть поля солі та пароля, щоб це запропонувало вам їх. Текст не маскується під час набору тексту, але він не відображатиметься у вашій історії баш. Ви також можете запустити команду з провідного простору, але я завжди забуваю це зробити.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"

2
Ви також можете налаштувати, bashщоб не записувати команди з префіксом, додавши пробіл HISTCONTROL=ignorespaceу .bashrcфайл. Під час запуску команди, яку потрібно виключити з історії, просто введіть пробіл, а потім фактичну команду.
theillien

1

sha512 htpasswd

Команда, яка запитує користувача та пароль та генерує звичайний htpasswd-файл:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd

Працює з усіма версіями python> 2.5.



0

Якщо ви використовуєте метод Python (> = 2.7) з відповіді сима і хочете підтвердити свій пароль, перш ніж він генерується - тому що ви жирите паролі пальця ...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'

У версії цієї відповіді від 29 листопада 2017 року сказано, що це працює для python 2.7 (або пізнішої версії). У криптовалютному модулі python2.7 немає mksalt (). Також я думаю, що ви хочете, щоб виклик crypt.mksalt () був другим аргументом crypt.crypt () (неправильно встановлений закритий батьків?).
Хуан-

0

версія Linux OpenSL "OpenSSL 1.1.1" в Linux і версія "LibreSSL 2.6.5" на підтримці MacOS md5_crypt.

Просто запустіть і введіть пароль:

openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>

або введіть звичайний текстовий пароль безпосередньо в CLI:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>

-12

Ви можете використовувати sha512sum:

echo "password" | sha512sum

24
Ця відповідь невірна. Команда не генерує дійсний хеш пароля SHA-512 . Він просто обчислить контрольну суму пароля рядка \ n (зауважте, що в кінці є також новий рядок). Хеші паролів Unix засолені та містять хеш-код версії між двома символами "$". Дивіться відповідь від @slm.
zorlem

Більш конкретно, проблема полягає в тому, що, хоча пароль дещо затуманений, цей метод є вразливим для атаки en.wikipedia.org/wiki/Rainbow_table .
DepressionDaniel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.