Получение значения пароля SHA из базы данных Ldap (ApacheDs)

У меня есть база данных ldap. Я использую класс объекта inetorgPerson. В этом классе есть атрибут userPassword. Значения userPassword представляют собой криптографию SHA. Я использую пакет javax.naming.directory для получения значения userPassword. Однако возвращаемое значение не совпадает со значением пароля SHA. Как я могу получить правильное значение? Простые коды:

public ArrayList<String> search(String base, String filter,String[] returningAttributes){
        ArrayList<String> result=new ArrayList<String>();
            SearchControls ctls = new SearchControls();
            ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            ctls.setReturningAttributes(returningAttributes);

        NamingEnumeration resultEnum = null;
        try {
            resultEnum = ctx.search(base, filter, ctls);
              while (resultEnum.hasMore()) {
                SearchResult res = (SearchResult) resultEnum.next();

                // print DN of entry
               // System.out.println(res.getNameInNamespace());

                // print attributes returned by search
                Attributes attrs = res.getAttributes();
                NamingEnumeration e = attrs.getAll();
                while (e.hasMore()) {
                    Attribute attr = (Attribute) e.next();
                    result.add(attr.toString());
                }
                System.out.println();

            }
            return result;
        } catch (NamingException e) {

        }
        return null;
    }

person olyanren    schedule 06.08.2011    source источник
comment
Я не понимаю, что ты пытаешься сделать. Вы хотите получить исходный пароль из сохраненного значения, которое представляет собой исходный пароль, хэшированный с помощью SHA?   -  person JB Nizet    schedule 06.08.2011
comment
нет, никто не может получить доступ к исходному паролю из значения пароля SHA. Допустим, я ввел пароль в текстовое поле в jsf 2, а затем создал пароль SHA из введенного пароля. После этой операции я хочу сравнить пароль sha в ldap с моим паролем jsf 2. Но я не могу получить правильные значения SHA от LDAP. Возвращаемое значение: [B0X.. и т. д., но ожидаемое значение: {SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=   -  person olyanren    schedule 06.08.2011
comment
Код должен проходить через attribute options перед циклом через значения атрибутов.   -  person Terry Gardner    schedule 08.08.2011


Ответы (2)


Я хочу сравнить пароль sha в ldap с моим паролем jsf 2

Нет, ты не хочешь этого делать. Вы хотите выполнить LDAPContext.reconnect() с новыми учетными данными и позволить LDAP выполнить сравнение.

person user207421    schedule 07.08.2011
comment
И что делать, если мне нужно кэшировать записи LDAP в отдельное хранилище? Например, как JIRA делает это для управления пользователями? - person Peter Siska; 29.10.2011
comment
@PeterSiska Я ничего не знаю о Jira, но она должна использовать LDAP так же, как и все остальные. Возможность расшифровки паролей чревата серьезными юридическими последствиями: вы теряете неотказуемость транзакций. Что касается вашего вопроса, то в первую очередь не существует такого понятия, как «пароль JSF». - person user207421; 29.10.2011

Я не уверен, что понимаю ваш вопрос, но если хэш пароля не соответствует вашим ожиданиям, это может быть причиной:

Сервер хранит солёные хэши паролей, которые будут отличаться от sha1(password).

person Anders Lindahl    schedule 06.08.2011
comment
[B@e06940 это то, что вы получаете с помощью System.out.println() массива byte[]....... byte[] нет toString() - person J-16 SDiZ; 06.08.2011
comment
Я решил проблему. Добавлен только атрибут attr = (Attribute) e.next(); Значение объекта = attr.get (0); System.out.println (новая строка ((байт []) значение)); - person olyanren; 06.08.2011