나는 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;
}
나는 당신이하려는 것을 이해하지 못합니다. SHA로 해시 된 원래 암호 인 저장된 값에서 원래 암호를 가져 오시겠습니까? –
아니요, 아무도 SHA 암호 값에서 원래 암호에 액세스 할 수 없습니다. 말하자면, jsf 2의 텍스트 상자에 암호를 입력 한 다음 입력 한 암호로 SHA 암호를 만들었습니다. 이 작업을 마친 후에 나는 ldap의 sha 암호를 jsf 2 암호와 비교하려고합니다. 하지만 LDAP에서 올바른 SHA 값을 가져올 수 없습니다. 반환 값은 [B0X .. 등이지만 예상 값은 다음과 같습니다. {SHA} fEqNCco3Yq9h5ZUglD3CZJT4lBs = – olyanren
코드는 속성 값을 반복하기 전에'속성 옵션 '을 반복해야합니다. –