Короткий ответ: MD5 - это способ узнать достаточно о пароле, чтобы сравнить его - уникальный отпечаток пальца - без фактического хранения пароля.
Более длинный: MD5 можно представить как генератор отпечатков пальцев. Вы берете столько бит, сколько можете, и в итоге получается 128 бит. Сумма md5 всегда будет одинаковой для любой строки. Но трудно предсказать, какой будет сумма md5 для любой заданной строки. Это не может быть полностью изменено. Вы не можете получить пароль от хэша, эта информация выброшена.
Почему MD5? Вы не хотите хранить действительный пароль. Если я могу взломать вашу БД, я получу пароли. Это небезопасно.
Так что я могу хранить хэш. При входе в систему я получаю md5sum введенного вами пароля и md5sum в БД, посмотрите, совпадают ли они. Тогда, даже если вы получите хеш, вы не сможете вернуться назад, чтобы получить пароль. У вас есть хеш, но в теории вы не можете получить пароль.
Это безопаснее, но помните, один и тот же пароль всегда будет хэшировать один и тот же md5. «Пароль» всегда будет 286755fad04869ca523320acce0dc6a4. Если я вижу 286755fad04869ca523320acce0dc6a4 в БД, я знаю, что ваш пароль - «пароль». Таким образом, один из методов - добавить что-то под названием «соль», немного уникальности к вашему паролю. Итак, скажем для меня, моя соль выбрана, о, Idunno, «1b24». Я добавляю это к данным md5, что дает мне c4f8469e00c67d70dfbaa91cdf948fa8. Когда я храню пароль, может быть, я храню 1b24 | c4f8469e00c67d70dfbaa91cdf948fa8. Затем, когда вы вводите «пароль», я вижу в БД, мне нужно добавить 1b24, и я получу совпадение.
MD5 фактически не используется для этого. Есть более новые (например, SHA1), которые лучше разбрасывают биты. Иногда вы проходите несколько раундов. Это повышает безопасность, усложняя создание огромных списков этих отпечатков пальцев - вычисление занимает слишком много времени.