1

Topic: Ucoz пароль: шифрование при переносе пользователей

Как известно, в системах uCoz/uWeb есть возможность создания файла бекапа, а также последующего восстановления данных из него. Кроме всего прочего, в архиве бекапа находятся и текстовые файлы, содержащие в себе значения полей базы данных uCoz. Как правило, это значения из таблиц материалов, комментариев, пользователей и т. д. Каждая строка в таком файле бекапа отвечает за определенный материал; значения параметров разбиты разделителем «|». Так что, предварительно определив последовательность полей, не представляет большого труда написать скрипт, импортирующий в ту же БД MySQL данные из таких текстовых файлов.

2

Re: Ucoz пароль: шифрование при переносе пользователей

Однако, есть одно «но» и связано оно с бекапом таблицы пользователей. Пароли в базах данных, как вправило, хранятся в зашифрованном виде, и БД uCoz — не исключение. Таким образом, даже имея на руках таблицу БД, обычно невозможно определить, у какого пользователя какой пароль — в БД хранится только его хэш. Однако, это не значит, что пользователей нельзя экспортировать с паролями — вполне можно импортировать в БД эти хэши, а затем, как это обычно и делается, при входе пользователя сравнивать хэш введённого им пароля и хэш в БД. Для этого нужно только одно — знать алгоритм хэширования.

В бекапе пользователей uCoz третьим значением идёт строка, например, вот такая: $1$SIq1$Z7ujk8SsSwv/TCxmI6NzT0. Именно это значение и является хэшем пароля пользователя. Далее, как уже было сказано, встаёт вопрос: что это за хэш и как он получен?

В сети интернет, есть скрипты, с помощьб которых можно импортировать бекап пользователей uCoz в БД движков Wordpress, Joomla, Drupal. Таким образом, мне стало очевидно, что алгоритм шифрования известен, по крайней мере разработчикам этих плагинов-скриптов.


Служба техподдержки Юкоз дает ответ:
«Расшифровать пароль не представляется возможным и по понятным причинам нам также запрещено вдаваться в подробности обсуждения алгоритма шифрования паролей».

Но как оказалось, расшифровка представляет собой стандартный хэш Unix, получаемый в PHP функцией crypt(), а $1$*$ (* — любые символы) — это соль.

В итоге записать можно так: crypt('pass', '$1$SIq1$');
Затем сравнить результаты совпадений.