2011-08-06 24 views
1

我有一個ldap數據庫。我正在使用inetorgPerson對象類。在這個類中有userPassword屬性。 userPassword值是SHA crypt。我正在使用javax.naming.directory包來獲取userPassword值。但是,返回值與SHA密碼值不同。我如何獲得正確的價值? 一個簡單的代碼是:從Ldap數據庫(ApacheDs)獲取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; 
    } 
+0

我不明白你想要做什麼。你想從存儲的值中獲取原始密碼,這是SHA原始密碼的哈希值嗎? –

+0

不,沒有人可以從SHA密碼值訪問原始密碼。比方說,我在jsf 2中的文本框中輸入了一個密碼,然後從輸入的密碼創建了SHA密碼。在此操作之後,我想將ldap中的sha密碼與我的jsf 2密碼進行比較。但是我無法從LDAP獲取正確的SHA值。返回值是[B0X ..等,但期望的值是:{SHA} fEqNCco3Yq9h5ZUglD3CZJT4lBs = – olyanren

+1

代碼在循環訪問屬性值之前必須遍歷「屬性選項」。 –

回答

0

我不知道我理解你的問題,但如果密碼哈希是不是你所期望的,這可能是原因是什麼:

服務器存儲salted密碼哈希,這將不同於sha1(password)

+0

userPassword:[B @ e06940我從LDAp數據庫中得到這個值.. – olyanren

+0

'[B @ e06940'就是你通過System.out.println()獲得的byte []'數組.......' byte []'沒有'toString()' –

+0

我解決了這個問題。僅添加屬性attr =(Attribute)e.next(); Object value = attr.get(0); System.out.println(new String((byte [])value)); – olyanren

3

我想在LDAP與我的JSF 2密碼

沒有比較SHA密碼,你不想這樣做。您希望使用新憑據執行LDAPContext.reconnect(),並讓LDAP進行比較。

+0

如果我需要將LDAP條目緩存到單獨的存儲區,應該做些什麼?比如像JIRA那樣做用戶管理? –

+0

@PeterSiska我對Jira一無所知,但它應該像其他人一樣使用LDAP。能夠解密密碼存在嚴重的法律後果:您失去了不可否認的交易。關於你的問題,首先不存在像'JSF密碼'這樣的事情。 – EJP