Вопрос

Я работаю с Subversion на базе Windows и хотел бы написать простую утилиту на .NET для работы с файлом паролей Apache.Я понимаю, что он использует функцию, называемую MD5Crypt, но, похоже, я не могу найти описания алгоритма, кроме того, что в какой-то момент он использует MD5 для создания хэша.

Кто-нибудь может описать алгоритм MD5Crypt и формат строки пароля?

Это было полезно?

Решение

Точное текстовое описание алгоритма шифрования, обновленного для использования с sha256 и sha512, находится по адресу http://www.akkadia.org/drepper/SHA-crypt.txt

Он включает в себя контрасты с алгоритмом MD5, поэтому он должен дать вам то, что вы ищете.

Другие советы

Вы можете найти реализацию md5crypt в пакет tcllib. Загрузка доступна с сайта кузница- источник.

Вы также можете найти пример md5crypt, совместимого с apache, в исходный код для универсального обработчика CAS

MD5Crypt - это, по сути, замена старомодной функции unix crypt.Он был представлен во freebsd, а также был принят другими группами.

Основная идея заключается в следующем:

  • хэш - это хороший способ хранения пароля
    • вы берете введенный пользователем пароль и хэшируете его
    • сравните его с сохраненным хэшем
    • если хэш один и тот же, пароли совпадают

Но есть одна проблема:

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

Итак, мы можем добавить к паролю строку "соль".

  • Это может быть любая случайная вещь.
  • Предположим, для вашей учетной записи это "zuzu", а для моей учетной записи это "rjrj".
  • Теперь мы хэшируем строку "jeffzuzu" для вашего пароля и "jeffrjrj" для моего пароля.
  • Теперь у нас есть разные хэш-значения для нашего пароля.
  • Мы можем безопасно сохранить значение salt вместе с хэшированным паролем, поскольку даже знание значения salt не поможет расшифровать хэш.

Вы упоминаете .net, на другом форуме есть указатель на это:

System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();

string hash =BitConverter.ToString((md5.ComputeHash(
System.Text.ASCIIEncoding.Default.GetBytes(stringtohash) ) ));

ХТХ!

Этот процесс довольно сложный...соль и пароль хэшируются вместе не один раз, а 1000 раз.Кроме того, кодировка base64 использует другой алфавит, и отступы удалены с конца.

Вероятно, лучше всего было бы найти библиотеку для использования, например glibc под cygwin.

Поскольку вы все равно пишете код против Apache, взгляните на Реализация Apache из крипты-md5.

Оригинальный алгоритм (я думаю) на языке Си можно найти здесь.Он отличается от приведенной выше реализации только другим магическим числом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top