Я тестирую все, что нахожу пару дней, чтобы правильно декодировать objectGUID. Я пытаюсь получить Объект, позже преобразовав его в 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);
}
}