私は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;
}
私はあなたがしたいことを理解していません。保存された値から元のパスワードを取得したいのですが、元のパスワードはSHAでハッシュされていますか? –
いいえ、誰もSHAパスワードの値から元のパスワードにアクセスすることはできません。言いますと、私はjsf 2のテキストボックスにパスワードを入力し、入力されたパスワードからSHAパスワードを作成しました。この操作の後、ldapのshaパスワードとjsf 2パスワードを比較したいと思います。しかし、LDAPから正しいSHA値を取得することはできません。戻り値は[B0X ..などですが、期待値は{SHA} fEqNCco3Yq9h5ZUglD3CZJT4lBs = – olyanren
です。属性値をループする前にコードは '属性オプション 'をループしなければなりません。 –