2012-04-13 2 views
1

Я работаю с системой moodle, но оказывается, что он использует хеширование соли md5. Я нашел, что кто-то пришел, так что, возможно, вы могли бы объяснить это мне, потому что у меня есть только базовые знания php.php code md5 описание хэширования

function validate_internal_user_password($user, $password) { 
global $CFG; 

if (!isset($CFG->passwordsaltmain)) { 
    $CFG->passwordsaltmain = ''; 
} 

$validated = false; 

if ($user->password === 'not cached') { 
    // internal password is not used at all, it can not validate 

} else if ($user->password === md5($password.$CFG->passwordsaltmain) 
     or $user->password === md5($password) 
     or $user->password === md5(addslashes($password).$CFG->passwordsaltmain) 
     or $user->password === md5(addslashes($password))) { 
    // note: we are intentionally using the addslashes() here because we 
    //  need to accept old password hashes of passwords with magic quotes 
    $validated = true; 

} else { 
    for ($i=1; $i<=20; $i++) { //20 alternative salts should be enough, right? 
     $alt = 'passwordsaltalt'.$i; 
     if (!empty($CFG->$alt)) { 
      if ($user->password === md5($password.$CFG->$alt) or $user->password === md5(addslashes($password).$CFG->$alt)) { 
       $validated = true; 
       break; 
      } 
     } 
    } 
} 

if ($validated) { 
    // force update of password hash using latest main password salt and encoding if needed 
    update_internal_user_password($user, $password); 
} 

return $validated; 

}

Было бы трудно изменить, что после ввода простого текста она стала хэшируются?

+1

Ваш вопрос не имеет смысла. Совершенно непонятно, что вы пытаетесь сделать. – ceejayoz

+0

Я создаю приложение java, которое будет подключаться к базе данных и получать данные от него, но есть проблема. Используя зарегистрированную веб-страницу учетные данные, пароль был изменен. Этот код должен быть таким, каким он будет изменен. Но я не понимаю, и я хотел бы, если бы кто-нибудь мог мне это объяснить. – LTnewbie

+1

Используйте API веб-сервиса Moodle.Не используйте базу данных напрямую. Moodle достаточно разбит, потому что ... не ухудшайте его. – Brad

ответ

1

Это проверка пароля с использованием некоторого унаследованного пароля.

Есть 5 видов паролей это позволит:

  • md5 (пароль)
  • md5 (addslashes (пароль))
  • md5 (пароль + родовое соль)
  • md5 (addslashed) + родовой соль)
  • md5 (пароль + saltX)

Первые вещи во-первых, что такое md5? md5 является «дайджестом сообщений 5». Короче говоря, это функция преобразования строки в 32-символьный строковый вызов hash. Основным свойством hash является то, что трудно (как в вычислительной степени) получить исходную строку обратно. Идеально подходит для хранения паролей, не так ли? :)

Но одного пароля недостаточно. Представьте, что ваш пароль «дракон» (очень плохой пароль кстати). Если вам известно, что «дракон» - «8621ffdbc5698829397d97767ac13db3» в md5, вы можете узнать пароль, просто взглянув на hash. Таким образом, вы добавляете то, что называется солью. Это просто еще одно слово для добавления пароля перед хэшированием.

Если соль «notsob1gs3cret» пароль, по существу, «dragonnotsob1gs3cret», что приводит к: «c47948e6b966357f1b9a3732c4ee7c72», который ничего не выглядит как «8621ffdbc5698829397d97767ac13db3». Это еще одно свойство хеша, ввод которого аналогичен, должен давать результат, который совсем не похож, достаточно, чтобы быть почти таким же, как любое случайное слово.

Если ваш атакующий никогда не видел соль «notsob1gs3cret», он не будет так легко угадать исходный пароль.

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

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

хэш немного текста просто сделать:

$text = "a bit of text"; 
var_dump(md5($text)); 
+0

Как узнать, какое сольное слово используется? – LTnewbie

+0

Вот в чем он не знает, он просто пытается их всех. Конечно, как только вы найдете совпадение, вы узнаете, какой из них использовался, но для этого также нужен действующий пароль. – Halcyon

+0

Очень полезно, спасибо. – Norse

Смежные вопросы