как сгенерировать хэш, подобный htpasswd от apache, используя java
Вопрос
я использую "Принудительное шифрование пароля MD5" в htpasswd для генерации хэша, например '123', который я получаю:
используйте htpasswd:123 => $apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/
используйте MD5-дайджест:123 => 202cb962ac59075b964b07152d234b70
пожалуйста, скажите мне, как я могу сгенерировать хэш, подобный apache htpasswd, используя java Спасибо.
Решение
Пароли в файлах Apache .htpasswd кодируются с помощью соль.Если вы хотите сгенерировать эти пароли с помощью Java, вам нужно будет сделать то же самое. Этот сайт содержит объяснение алгоритма соли / хеширования, используемого для файлов Apache .htpasswd;Я ищу реальный алгоритм, который вы могли бы использовать, и отредактирую свой ответ после того, как найду его.
Редактировать:Похоже, об этом уже спрашивали раньше, прямо здесь, на SO:
Программное построение htpasswd
Вот документация от Apache, а также их исходный код:
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
http://svn.apache.org/viewvc/apr/apr-util/branches/1.3.x/crypto/apr_md5.c?view=co
Другие советы
Я нашел, где кто-то занимался этим на java и выпустил его с лицензией на beer-ware.Лучше поздно, чем никогда, верно?Он находится там, вероятно, с 2007 года, так что я был бы удивлен, если бы вы в конце концов не нашли его через некоторое время после запроса в 2010 году.
"Порт Java С помощью:Джонатан Эбби, jonabbey@arlut.utexas.edu "
"MD5Crypt.java является портом пол-Хеннинг Камп оригинал для FreeBSD Хэш-алгоритм MD5 основе, с дополнительным методам поддержки В Apache файл httpd сервер вариант этого алгоритма".
"Результирующая строка будет иметь вид '$apr1$<salt>$<hashed mess="">'"
Md5Crypt - это то, что вы ищете.Это реализует Алгоритмы Apache htpasswd
Специфичный для Apache алгоритм, использующий повторяющийся (1000 раз) MD5-дайджест различных комбинаций случайного 32-битного соль и тот Пароль.
import org.apache.commons.codec.digest.Md5Crypt;
...
String enPasswd = Md5Crypt.md5Crypt("your plain password".getBytes());
String htpasswdContent = "your username:" + enPasswd;