2011-08-06 5 views
1

나는 LDAP 데이터베이스가 있습니다. inetorgPerson 객체 클래스를 사용하고 있습니다. 이 클래스에는 userPassword 속성이 있습니다. userPassword 값은 SHA 암호입니다. userPassword 값을 얻기 위해 javax.naming.directory 패키지를 사용하고 있습니다. 그러나 반환 값은 SHA 암호 값과 다릅니다. 올바른 가치를 얻으려면 어떻게해야합니까? 간단한 코드는 다음과 같습니다Ldap 데이터베이스 (ApacheDs)에서 SHA 암호 값 가져 오기

서버에 저장 salted 비밀번호 :

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

내가 당신의 질문을 이해하지만, 암호 해시가 아닌 경우이 이유가 될 수있는 기대 모르겠어요 해시는 sha1(password)과 다릅니다.

+0

userPassword : [B @ e06940 LDAp 데이터베이스에서이 값을 얻습니다. – olyanren

+0

'[B @ e06940]은 System.out.println()에 의해'byte []'array .......' byte []'doString()이 없습니다. –

+0

문제가 해결되었습니다. 추가 된 속성 만 attr = (Attribute) e.next(); 개체 값 = attr.get (0); System.out.println (new String ((byte []) value)); – olyanren

3

내가 내 JSF 2 암호

번호로 LDAP에 샤 암호를 비교하려면, 당신은 그렇게하고 싶지 않아. 새 자격 증명으로 LDAPContext.reconnect()를 수행하고 LDAP이 비교를 수행하게하려고합니다.

+0

그리고 별도의 저장소에 LDAP 항목을 캐시해야하는 경우 어떻게해야합니까? 예를 들어 JIRA가 사용자 관리를 위해 그런 역할을합니까? –

+0

@PeterSiska Jira에 대해서는 아무 것도 모르지만 다른 모든 사람들과 동일한 방법으로 LDAP를 사용해야합니다. 암호를 해독 할 수있는 심각한 법적 결과가 있습니다. 즉, 트랜잭션의 거부 가능성을 잃게됩니다. 귀하의 질문에 관해서는 'JSF 암호'와 같은 것이 없습니다. – EJP