Они добавляют и добавляют соли к паролю перед тем, как запустить его через MD5.
Так генерируется соль, она выглядит как случайная строка, длина которой указана в конфигурации приложения "
$this->user_salt = randomcode($setting['setting_password_code_length']);
Здесь они разделяют одну соль на две части и ставят левую сторону перед паролем, а правую - после "
list($salt1, $salt2) = str_split($this->user_salt, ceil(strlen($this->user_salt) / 2));
$salty_password = $salt1.$user_password.$salt2;
Теперь они хешируют подсоленный пароль:
$user_password_crypt = md5($salty_password);
Чтобы правильно расшифровать это, вам нужно будет прочитать соль для этого пользователя.
$username = $POST['username'];
$password = $POST['password'];
$user = get_user_from_database($username);
list($salt1, $salt2) = str_split($user->salt, ceil(strlen($user->salt) / 2));
$salted_password = md5($salt1.$password.$salt2);
if($salted_password == $user->crypted_password) {
echo "Login successful";
} else {
echo "Invalid password";
}
Вот страница Википедии о солях вкриптография.