Последовательность атрибутов Active Directory objectUUID в Java/Apache Directory Studio

Я подключаюсь к серверу Active Directory с Java. Я добавляю свойство:

 env.put("java.naming.ldap.attributes.binary", "objectGUID");

а затем я прочитал objecUUID следующим образом:

Attribute a = result.getAttributes().get("objectUUID");
byte[] b = (byte[])a.get();

и форматировать так:

String id = Hex.
    encodeHexString(b).
    replaceAll(
       "(.{8})(.{4})(.{4})(.{4})(.{12})", 
       "$1-$2-$3-$4-$5"
    )
);

Результатом является красивый формат UUID. Когда я хочу найти запись по ее UUID, я убираю тире:

id = id.replaceAll("[^a-zA-Z0-9]+", "");

а затем вставьте обратную косую черту:

id = id.replaceAll("([a-zA-Z0-9]{2,2})", "\\\\$1");

Все это прекрасно работает. У меня проблема с тем фактом, что Apache Directory Studio показывает (например) UUID моего пользователя как:

 8e591e3a-35ab-45cc-8dca-c5e451adc975

тогда как мой код показывает UUID той же записи, что и:

 3a1e598e-ab35-cc45-8dca-c5e451adc975

как видите, старший и младший байты меняются местами для левых восьми байтов, но идентичны с правой стороны. Почему это? Это кажется очень странным...

.rm


person rmalchow    schedule 28.07.2017    source источник


Ответы (1)


Если вы посмотрите здесь:

https://en.wikipedia.org/wiki/Universally_unique_identifier

Name                               Length (Bytes) Length (Hex Digits) Contents
time_low                           4              8                   integer giving the low 32 bits of the time
time_mid                           2              4                   integer giving the middle 16 bits of the time
time_hi_and_version                2              4                   4-bit "version" in the most significant bits, followed by the high 12 bits of the time
clock_seq_hi_and_res clock_seq_low 2              4                   1-3 bit "variant" in the most significant bits, followed by the 13-15 bit clock sequence
node                               6              12                  the 48-bit node id

Вы можете видеть, что первые 3 сегмента представляют собой целые числа/шорты, связанные с данными «времени» и, следовательно, имеют порядок байтов, тогда как другие разделы представляют собой просто двоичные данные и поэтому не имеют.

person Ashigore    schedule 30.07.2017