Вопрос: Как создать хешированный пароль SHA-512 для тени?


Предыдущие вопросы SF, которые я видел, привели к ответам, которые вызывают пароль MDH.

Есть ли у кого-нибудь предложение о выпуске хешированного пароля SHA-512? Я предпочел бы один liner вместо скрипта, но, если скрипт - единственное решение, все в порядке.

Обновить

Заменяя предыдущие версии py2 на это:

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

56
2017-11-11 11:14


Источник


SHA и MD5 являются не шифрование. Это алгоритмы хеширования. Существенное различие заключается в том, что хешированные данные не подлежат восстановлению. Что тебе нужно сделать? - SmallClanger
Спасибо. Изменен вопрос. man 5 shadow относится к нему как «зашифрованный пароль», поэтому я согласился с этим термином. - Belmin Fernandez
Извиняюсь, если это было немного смешно. Вы пытаетесь вручную генерировать теневые пароли? Если да, взгляните на свою /etc/shadow содержание. Вот увидишь $x$salt$hash, x обозначает алгоритм, используемый crypt, с 6 типичный для современных linux, который является sha512 (см. man 3 crypt). Любой из нижеприведенных ответов даст такой же хэш, если вы дадите ему ту же соль. - SmallClanger
О нет, не злобный. Вы уточнили, что меня смутили, поэтому я очень благодарен, сэр! - Belmin Fernandez
Спасибо! Основанный на passlib является единственным, с которым я смог работать над OS X. - Stig Brautaset


Ответы:


Вот один лайнер:

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

Python 3.3+ включает mksalt в склепе, что делает его намного проще (и более безопасным):

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

Если вы не представите аргумент crypt.mksalt (он может принять crypt.METHOD_CRYPT, ...MD5, SHA256, а также SHA512), он будет использовать самые сильные доступные.

Идентификатор хэша (номер после первого $) относится к используемому методу:

  • 1 -> MD5
  • 2a -> Blowfish (не в mainline glibc, добавленный в некоторые дистрибутивы Linux)
  • 5 -> SHA-256 (начиная с glibc 2.7)
  • 6 -> SHA-512 (начиная с glibc 2.7)

Я бы порекомендовал вам посмотреть, что такое соли, и такие, как маленькие комбайнеры, комментировать разницу между шифрованием и хэшированием.

Обновление 1: Созданная строка подходит для сценариев тени и кикстарта. Обновление 2: предупреждение. Если вы используете Mac, см. Комментарий об использовании этого в python на Mac, где он работает не так, как ожидалось.


62
2017-11-11 11:29



Импорт getpass а также pwd модулей не требуется. - akaihola
замещать random_salt с фактической случайной солью. - Belmin Fernandez
Я не могу заставить это работать в Йосемити. Это то, что он выплевывает: $6asQOJRqB1i2 - это не кажется достаточно длинным, чтобы быть правильным! - Stig Brautaset
Пусть модуль склепа сделает соль для вас: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))' - rrauenza
@kasperd Я должен был посмотреть на документы; это в 3.3+ - Nick T


В Debian вы можете использовать mkpasswd  для создания паролей с различными алгоритмами хеширования, подходящими для / etc / shadow. Он включен в пакет whois (в соответствии с apt-файлом)

mkpasswd -m sha-512
mkpasswd -m md5

для получения списка доступных типов алгоритмов хэширования:

mkpasswd -m help 

НТН


34
2017-07-23 09:22



Какой пакет это дает? Есть mkpasswd (часть ожидания) в рамках Fedora, но для этой цели это бесполезно. - Cristian Ciupitu
По его словам, версия mkpasswd он говорит о Debian / Ubuntu. mkpasswd на Fedora (по крайней мере до 14) отсутствует -m переключатель. - slm
Любопытно, что это пакет whois, наследство от Debian. Видеть dpkg -S /usr/bin/mkpasswd Я сам не мог в это поверить: D - Rbjz
Чтобы проверить пароль, если первая цифра равна 6, используйте часть между вторым и третьим долларами в качестве соли. Например, для root:$6$AbCdE$xyz:... вы должны использовать: mkpasswd -m sha-512 -S AbCdE, С правильным паролем вы должны получить тот же хеш. - Luc


Лучший ответ: личинка-крипта

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



Простое решение ... работало для меня на CentOS 6. - Banjer
В системах, имеющих grub-crypt команда, это действительно самый надежный и удобный способ сделать это. Нет смысла играть с солями вручную, когда вы можете прикрутить его. Проблема в том, что все более современные системы имеют GRUB2 и поэтому не будут включать эту команду. - rsaw


Вот короткий код C для генерации пароля SHA-512 на разных типах Unix.

Файл: 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;
}

Скомпилировать:

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

Применение:

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

7
2018-02-13 10:03



Этот вопрос 3 года ... - Grumpy
Этот комментарий не такой старый. Смазливое приложение, которое вы получили там, это только c ответ на него, даже если он выглядит как пример справочной страницы :) - Sampo Sarrala


Perl однострочное решение для генерации пароля SHA-512:

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

Работал на RHEL 6


4
2018-05-23 02:26





Почему бы не выполнить следующую проверку и модификацию машин Centos / RHEL, чтобы гарантировать, что все хэширование пароля для / etc / shadow выполняется с помощью sha512. Затем вы можете просто установить свой passworkd обычно с помощью команды 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





Вот однострочный, который использует команды оболочки для создания хешированного пароля SHA-512 со случайным сольем:

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

Заметки

  1. Возможно, вам потребуется установить пакет «whois» (Debian, SuSE и т. Д.), Который предоставляет «mkpasswd».
  2. См. Crypt (3) для получения подробной информации о формате строк в «/ etc / shadow».

2
2018-02-14 23:10



К сожалению, whois пакет от Fedora 18 не предоставляет никаких mkpasswd, - Cristian Ciupitu
В Arch Linux: / usr / bin / mkpasswd принадлежит ожиданию 5.45-3 - Nowaker
То же самое на Fedora 20, и он делает что-то еще. - Cristian Ciupitu
К сожалению, предлагаемая команда имеет две проблемы: 1) предоставленный пароль теперь хранится в истории вашей оболочки и отображается всем, у кого есть команда history или аналогичная. 2) Вам не нужно поставлять случайную соль в командной строке - и я думаю, вы должны позволить mkpasswd сделать это для вас, вместо того, чтобы использовать фанки-трюки openssl. (Обратите внимание, что это верно, по крайней мере, на Ubuntu Quantal. Вы можете протестировать его, выполнив «mkpasswd -m sha-512 foo» несколько раз. Вы увидите, что соль изменяется. Соль - это значение между символами 2-го и 3-го числа. ) - oskarpearson


Прочтите комментарий ниже, чтобы узнать о последствиях безопасности этого ответа

Для тех, кто имеет отношение к Ruby, это однострочный:

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

2
2018-02-17 20:42



Это неверно: функция rand Ruby небезопасна - она ​​использует PRNG, поэтому это приведет к результатам, которые могут быть реконструированы на основе предположения о времени / состоянии момента вашего запуска. - oskarpearson


HASH algos предназначены для производства дайджеста MESSAGE, они никогда не подходят для паролей, которые должны использовать какой-то HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - см. PBKDF2 или BCrypt


0
2017-07-30 09:05



Хороший момент, но man crypt говорит, что PBKDF2 не поддерживается. - 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

Вы можете клонировать его из моего репозитория github, если хотите: https://github.com/antoncohen/mksha


0
2018-02-14 23:23





Это не один лайнер, но он может помочь кому-то:

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 не является криптографически безопасным, os.urandom должен быть использован. 8 символов из словаря длиной 56 символов тоже слишком малы. Конкатентация укуса снова и снова на питоне тоже плохая (сложность O (n ^ 2)) - Hubert Kario