2011-08-06 7 views
1

私はLDAPデータベースを持っています。私はinetorgPersonオブジェクトクラスを使用しています。このクラスにはuserPassword属性があります。 userPasswordの値はSHA暗号です。私はjavax.naming.directoryパッケージを使用してuserPassword値を取得しています。ただし、戻り値はSHAパスワード値と同じではありません。どうすれば正しい価値を得ることができますか? A簡単なコードは次のとおりです。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 [] '配列.......' byte [] 'toString()'がありません –

+0

私はこの問題を解決しました。追加された属性attr =(属性)e.next(); オブジェクト値= attr.get(0);System.out.println(new String((byte [])value)); – olyanren

3

私は、あなたがそれを行うにはしたくない、私のJSF 2パスワード

とLDAPにSHAパスワードを比較したいです。新しい資格情報でLDAPContext.reconnect()を実行し、LDAPに比較を実行させたいとします。

+0

そして、別の店舗にLDAPエントリをキャッシュする必要がある場合はどうすればよいですか?たとえば、JIRAのようにユーザー管理をしていますか? –

+0

@PeterSiska私はJiraについて何も知らないけど、他の人と同じ方法でLDAPを使うべきです。パスワードを解読できるという深刻な法的影響があります。つまり、取引の拒否可能性を失います。あなたの質問に関しては、最初に「JSFパスワード」というものはありません。 – EJP

関連する問題