math Alt ←

Статический метод :crypt

Хеширование паролей.

^math:crypt[password;salt]

Метод хеширует password с учетом salt.

Параметры:

  • password — исходная строка.
  • salt — строка, определяющая алгоритм хеширования и вносящая элемент случайности в результат хеширования, состоит из начала и тела. Начало определяет алгоритм хеширования, тело вносит элемент случайности. Если тело не будет указано, Parser сформирует его случайным образом.

Неразумно хранить пароли пользователей, просто записывая их на диск или в базу данных, — ведь если предположить, что злоумышленник украдет файл или таблицу с паролями, он легко сможет ими воспользоваться. Поэтому принято хранить не пароли, а их хеши — результат надежного однозначного необратимого преобразования строки пароля. Для проверки введенного пароля к нему применяют то же преобразование, передавая в качестве salt сохраненный хеш, а результат сверяют с сохраненным.

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

Обязательно нужно задавать случайное тело salt, либо это может сделать Parser, если указывать не тело salt, а только его начало.

Таблица доступных алгоритмов

Алгоритм Описание Начало salt Тело salt
MD5 Встроен в Parser, доступен на всех платформах $apr1$ До 8 случайных букв (в любом регистре) или цифр
MD5 Если поддерживается операционной системой (UNIX) $1$ До 8 случайных букв (в любом регистре) или цифр
DES Если поддерживается операционной системой (UNIX) (нет) 2 случайных буквы (в любом регистре) или цифры
другие Какие поддерживаются операционной системой (UNIX) см. документацию к операционной системе, man 5 crypt, функция crypt см. документацию к операционной системе, man 5 crypt, функция crypt
В Parser, чтобы использовать в тексте символ $, перед ним необходимо поставить символ ^ — ^$.

Пример создания htpasswd-файла

@main[]
$users[^table::create{name	password
alice	xxxxxx
bob	yyyyyy
}]

$htpasswd[^table::create[nameless]{}]
^users.menu{
	^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$]}
}

^htpasswd.save[nameless;.htpasswd-parser-test]
Веб-сервер Apache позволяет в файлах с паролями (.htpasswd) использовать хеши, сформированные по любому из алгоритмов, представленных в таблице, включая алгоритм, встроенный в Parser.

Пример проверки пароля

$right[123]
$from_user[123]
$crypted[^math:crypt[$right;^$apr1^$]]

# обратите внимание на то, что $crypted при каждом обращении разный
$crypted<br>

^if(^math:crypt[$from_user;$crypted] eq $crypted){
	Казнить нельзя, помиловать
}{
	Казнить, нельзя помиловать
}

Подробная информация о MD5 доступна по ссылке: ietf.org/rfc/rfc1321.txt