几天来我一直在测试发现的所有内容,以正确解码objectGUID。我尝试稍后获得一个Object并将其转换为Byte [],我不确定这是否是正确的过程来对其进行解码并获取自测试以来在Active Directory中显示的值,但在进行解码时显示的值与其在AD中相应用户中出现的值不同。如果有人可以指导我制定正确的程序,以使我获得正确的价值,或者可以简要地解释我做错了什么,那么我可以接受任何解决方案。
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search(ldapSearchBase, searchFilter, searchControls);
//atributos [] contains the names of the attributes that I need to consult
while(results.hasMoreElements()){
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
for (int i = 0;i<=atributos.length;i++){
if(i<atributos.length){
if(atributos[i].equals("objectGUID")){
try {
Object c = attributes.get("objectGUID").get();
decodeEntryUUID(c);
content.put(attributes.get(atributos[i]).getID(),decodeEntryUUID(c));
}catch (NullPointerException e){
System.err.println("Problem listing attributes: " + e);
}
public String decodeEntryUUID(Object entryUUID) throws IOException {
String ret = "x";
ret=decodeGuid(serializeObject(entryUUID));
return ret;
}
public static String decodeGuid(byte[] guid) {
byte[] withBigEndian = new byte[] { guid[3], guid[2], guid[1], guid[0],
guid[5], guid[4],
guid[7], guid[6],
guid[8], guid[9], guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]
};
return convertToDashedString(withBigEndian);
}
public static String decodeObjectGUID(byte[] objectGUID) {
StringBuilder displayStr = new StringBuilder();
displayStr.append(convertToDashedString(objectGUID));
System.out.println(displayStr.toString()+" 3");
return displayStr.toString();
}
private static String convertToDashedString(byte[] objectGUID) {
StringBuilder displayStr = new StringBuilder();
displayStr.append(prefixZeros((int) objectGUID[3] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[2] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[1] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[0] & 0xFF));
displayStr.append("-");
displayStr.append(prefixZeros((int) objectGUID[5] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[4] & 0xFF));
displayStr.append("-");
displayStr.append(prefixZeros((int) objectGUID[7] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[6] & 0xFF));
displayStr.append("-");
displayStr.append(prefixZeros((int) objectGUID[8] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[9] & 0xFF));
displayStr.append("-");
displayStr.append(prefixZeros((int) objectGUID[10] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[11] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[12] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[13] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[14] & 0xFF));
displayStr.append(prefixZeros((int) objectGUID[15] & 0xFF));
return displayStr.toString();
}
private static String prefixZeros(int value) {
if (value <= 0xF) {
StringBuilder sb = new StringBuilder("0");
sb.append(Integer.toHexString(value));
return sb.toString();
} else {
return Integer.toHexString(value);
}
}