SHA512 посолил вопрос о хэш-коде

Можно использовать command команда для удаления специального поведения (посредством чего отказ заставляет оболочку выходить среди прочего) специального builtins в оболочках POSIX как ksh или bash.

Так:

if ! command . /my/file/source.ksh; then
  echo >&2 ". failed"
  exit 1
fi

Теперь, . может перестать работать если /my/file/source.ksh не может быть найден или не может быть открыт для чтения, или существует ошибка при чтении его или парсинге его, или последняя команда, выполненная в нем отказ возвратов.

Если Вы только хотите рассмотреть случай где source.ksh не может быть открыто для чтения, можно использовать exec (другое встроенное специальное предложение):

die() {
  IFS=" "
  printf >&2 'Error: %s\n' "$*"
  exit 1
}
command exec 3< /my/file/source.ksh || die "Can't read the file"
command . /dev/fd/3

Или используйте eval вместо .:

code=$(cat /my/file/source.ksh) || die "Can't read the file"
eval "$code"
7
09.10.2014, 19:11
2 ответа

На Ubuntu/Debian mkpasswd является частью пакета whois и реализуется в mkpasswd. c, которая на самом деле является всего лишь сложной оберткой вокруг функции crypt() в glibc, объявленной в unistd.h. crypt() принимает два аргумента: пароль и соль. Пароль является "test" в данном случае, соль префиксована на "$6$" для SHA-512 хэша (см. SHA-крипт), поэтому в crypt() передаётся "$6$Zem197T4".

Возможно, вы заметили -R опцию mkpasswd, которая определяет количество раундов. В документе вы найдете 5000 раундов по умолчанию. Это первая подсказка, почему результат никогда не будет равен простому соединению соли и пароля, он не хэшируется только один раз. На самом деле, если вы пройдете -R 5000, то получите тот же результат. В этом случае в crypt() передаётся "$6$ rounds=5000$Zem197T4", а реализация в glibc (это libc Debian/Ubuntu) извлекает из этого метода и количество раундов.

То, что происходит внутри crypt(), сложнее, чем просто вычислить один хэш, и в результате получается base64, закодированный в конце. Поэтому показанный результат содержит все виды символов после последнего '$', а не только [0-9a-f], как в типичной шестнадцатеричной строке хэша SHA-512. Алгоритм подробно описан в уже упомянутом SHA-Crypt документе.

5
27.01.2020, 20:19

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

Предположим, что один из ваших пользователей использует слабый пароль, скажем, 123456, ваш файл /etc/shadow был раскрыт. Теперь все, что нужно сделать злому хакеру, — это использовать радужную таблицу, чтобы вычислить слабый пароль и снова использовать его в других местах.

0
17.05.2020, 14:06

Теги

Похожие вопросы