Предыдущие вопросы по SF, которые я видел, привели к ответам, которые дают хешированный пароль MD5.
Есть ли у кого-нибудь предложение создать хешированный пароль SHA-512? Я бы предпочел один лайнер вместо скрипта, но если скрипт является единственным решением, это тоже нормально.
Замена предыдущих версий py2 на эту:
python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
Вот один лайнер:
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
), он будет использовать самые сильные из доступных.
ID хеша (число после первого $
) связано с используемым методом:
Я бы порекомендовал вам посмотреть, что такое соли и тому подобное, и, согласно smallclamgers, прокомментировать разницу между шифрованием и хешированием.
Обновление 1: полученная строка подходит для сценариев теней и кикстарта. Обновление 2: Предупреждение. Если вы используете Mac, см. Комментарий об использовании этого в python на Mac, где он работает не так, как ожидалось.
В Debian вы можете использовать mkpasswd для создания паролей с разными алгоритмами хеширования, подходящими для / etc / shadow. Он входит в пакет whois (согласно apt-файлу)
mkpasswd -m sha-512
mkpasswd -m md5
чтобы получить список доступных алгоритмов хеширования, введите:
mkpasswd -m help
HTH
Лучший ответ: 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)**
Вот короткий код 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)>
Perl однострочное решение для генерации хешированного пароля SHA-512:
perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'
Работал на RHEL 6
Вот однострочник, который использует команды оболочки для создания хешированного пароля SHA-512 со случайной солью:
[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $ (openssl rand -base64 16 | tr -d '+ =' | head -c 16)
Ноты
Почему бы не выполнить следующую проверку и модификацию машин 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
Прочтите комментарий ниже, чтобы узнать о последствиях этого ответа для безопасности.
Для тех, кто придерживается мировоззрения Ruby, вот одна строка:
'password'.crypt('$6$' + rand(36 ** 8).to_s(36))
Этот сценарий работал у меня на Ubuntu 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9
#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512
Он имеет следующие функции, которых не хватает некоторым другим альтернативам:
Если вам нужна альтернатива однострочникам, написанным на perl / python, mkpasswd - хороший вариант. Хотя он включен в пакет Debian whois, он отсутствует в системах CentOS / RHEL. Я модифицировал версию mkpasswd для Debian и включил более сильный механизм генерации соли, основанный на OpenSSL. Полученный двоичный файл полностью сохраняет все параметры командной строки версии Debian. Код доступен на github и должен компилироваться для любого варианта Linux: mkpasswd
Взгляните на страницу руководства для crypt (3), и я думаю, вы обнаружите, что инструмент crypt был обновлен для использования glibc и sha256 (5 долларов США) и sha512 (6 долларов США), нескольких раундов, гораздо большей соли и т. Д. .
Очевидно, что SHA512 имеет отношение к тому, как работает / etc / shadow.
Тем не менее, эта веб-страница была очень полезной - в частности, MKPASSWD, поскольку это решило МОЮ проблему.
Учитывая потенциально «утерянный» пароль, я могу использовать MKPASSWD и соль, чтобы сгенерировать хэш SHA512 и подтвердить / отклонить список возможных паролей.
Я бы использовал John the ripper - но, по крайней мере, на моем оборудовании (Raspberry Pi) и моем бюджете (ничего) - Джон не может этого сделать (похоже, он не поддерживает расширенный материал crypt / glibc в бесплатной версии raspbian.
Имейте в виду, поскольку у меня достаточно прав для чтения / записи / etc / shadow, Я МОЖЕТ просто перезаписать хеш и продолжать жить ... это академическое упражнение.
ПРИМЕЧАНИЯ Примечания к Glibc Версия этой функции для glibc2 поддерживает дополнительные алгоритмы шифрования.
If salt is a character string starting with the characters
"$id$" followed by a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryp‐
tion method used and this then determines how the rest of the
password string is interpreted. The following values of id are
supported:
ID | Method
─────────────────────────────────────────────────────────
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
So $5$salt$encrypted is an SHA-256 encoded password and
$6$salt$encrypted is an SHA-512 encoded one.
$ htpasswd -c /tmp/my_hash user1
New password:
Re-type new password:
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30
Очевидно, вы просто берете второе поле и можете удалить файл после того, как добавите его в тень или для использования с sudo (все еще скорее всего shadow).
Это не один лайнер, но может кому-то помочь:
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)
#!/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
Алгоритмы HASH предназначены для создания дайджестов MESSAGE, они никогда не подходят для паролей, которые должны использовать какой-то HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - см. PBKDF2 или BCrypt
Удивительно, но ни один ответ не предполагает простого openssl passwsd
команда с -6
вариант. Может, его еще не было в 2011 году?
Если вам все равно, что вводить пароль в командной строке (рискуя остаться в истории команд), вы можете сделать:
openssl passwd -6 YourPassword
Он сгенерирует соль и выведет такую строку:
$6$/57kpVAA/kuPUtzV$Ugxo0RTL2uXCvU7WH43c1qn0quMy2ve.qiBYJPG75tFgTN8gI5Jp/FYPXFOzIsASqVTqM42kjN2805VYLHKzm1
С stdin
вариант, он также может считывать пароль из STDIN (или файла), поэтому вы не оставляете его в истории:
openssl passwd -6 -stdin
Я не уверен, как SHA-512 связан с /etc/shadow
. Эти пароли crypt
изд.
Но если вы хотите, чтобы пароль был хеширован с помощью SHA-512, вы можете сделать это с помощью echo -n the_password | sha512sum
. Вы не можете использовать вывод для / etc / shadow.