Алгоритм MD5Crypt - PullRequest
       34

Алгоритм MD5Crypt

3 голосов
/ 23 августа 2008

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

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

Ответы [ 4 ]

4 голосов
/ 16 февраля 2011

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

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

3 голосов
/ 23 августа 2008

Вы можете найти реализацию md5crypt в пакете tcllib. Скачать можно с sourceforge .

Вы также можете найти пример совместимого с Apache md5crypt в исходном коде для Общего обработчика CAS

2 голосов
/ 01 октября 2008

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

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

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

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

2 голосов
/ 23 августа 2008

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

Основная идея такова:

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

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

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

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

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

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

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

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

НТН!

...