从Ldap数据库获取SHA密码值(ApacheDs)

时间:2011-08-06 15:30:52

标签: java ldap apacheds

我有一个ldap数据库。我正在使用inetorgPerson对象类。在这个类中有userPassword属性。 userPassword值是SHA crypt。我使用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;
    }

2 个答案:

答案 0 :(得分:3)

  

我想比较ldap中的sha密码和我的jsf 2密码

不,你不想这样做。您希望使用新凭据执行LDAPContext.reconnect(),并让 LDAP 进行比较。

答案 1 :(得分:0)

我不确定我理解你的问题,但是如果密码哈希不是你所期望的那样,那可能是原因:

服务器存储salted密码哈希值,与sha1(password)不同。