Mathcrypt
crypt. Хеширование паролей | |
^math:crypt[password;salt]
Хеширует password с учетом salt.
Параметры:
· | password - исходная строка; |
· | salt - строка, определяющая алгоритм хеширования и вносящая элемент случайности в результат хеширования, состоит из начала и тела. Начало определяет алгоритм хеширования, тело вносит элемент случайности. Если тело не будет указано, Parser сформирует случайное. |
Неразумно хранить пароли пользователей, просто записывая их на диск или в базу данных - ведь если предположить, что злоумышленник украдет файл или таблицу с паролями, он легко сможет ими воспользоваться. Поэтому принято хранить не пароли, а их хеши - результат надежного однозначного необратимого преобразования строки пароля. Для проверки введенного пароля к нему применяют то же преобразование, передавая в качестве salt сохраненный хеш, а результат сверяют с сохраненным.
Вносить элемент случайности необходимо, поскольку иначе потенциальный злоумышленник может заранее сформировать таблицу хешей многих частоиспользуемых паролей. Вторая причина: элемент случайности вносится на начальном этапе алгоритма хеширования, что существенно осложняет подбор пароля даже при использовании специальных аппаратных ускорителей.
Внимание: обязательно задавайте случайное тело salt, или позвольте Parser сделать это за вас, попросту не указывая тело salt, указывая только начало salt.
Таблица доступных алгоритмов:
Алгоритм | Описание | Начало salt | Тело "salt" | ||||
MD5 | встроен в Parser, доступен на всех платформах | $apr1$ | до 8 случайных букв (в любом регистре) или цифр | ||||
MD5 | если поддерживается операционной системой (UNIX) | $1$ | до 8 случайных букв (в любом регистре) или цифр | ||||
DES | если поддерживается операционной системой (UNIX) | (нет) | 2 случайных буквы (в любом регистре) или цифры | ||||
другие | какие поддерживаются операционной системой (UNIX) | читайте документацию на вашу операционную систему, функция crypt | читайте документацию на вашу операционную систему, функция crypt |
br>
Внимание: в Parser для использования в тексте символа '$' его необходимо предварить символом '^'.
Примечание: Веб-сервер Apache допускает в файлах с паролями (.htpasswd) использовать хеши сформированные по любому из алгоритмов, представленных в таблице, включая алгоритм, встроенный в 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]
Пример проверки пароля
$right[123]
$from_user[123]
$crypted[^math:crypt[$right;^$apr1^$]]
#обратите внимание на то, что $crypted при каждом обращении разный
$crypted<br>
^if(^math:crypt[$from_user;$crypted] eq $crypted){
Казнить нельзя, помиловать
}{
Казнить, нельзя помиловать
}
Подробная информация о MD5 доступна здесь: http://www.ietf.org/rfc/rfc1321.txt
Copyright © 1997?2004 Art. Lebedev Studio | http://www.artlebedev.ru | Дата обновления: 12.02.2004 |