Как преобразовать объектный каталог ActiveGUID в UUID в Coldfusion - PullRequest
0 голосов
/ 08 июня 2018

У меня есть запрос CFLDAP, возвращающий objectGUID.Как я могу преобразовать это в действительную строку UUID в шаблоне 8-4-4-4-12 в ColdFusion?

Я указал returnAsBinary="ObjectGUID", но toString(getLDAP.ObjectGUID) не возвращает желаемый результат.

Обновление:

Я пробовал binaryEncode ():

<cfset guid = binaryencode(getLDAP.objectguid,"HEX")> 

, который возвращает:

18E0CE3388B79C4EA4D73894AE8CD8F6

Но яожидая этого (был извлечен и предоставлен другим процессом, который я не могу увидеть их шаги преобразования).

3cee018-b788-4e9c-a4d7-3894ae8cd8f6 

Хмммм ... Хотя они не совпадают, последняя половина - то же самое.a4d7-3894ae8cd8f6.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Да ... Я нашел это в старом посте CF, и он работал для меня:

<CFLDAP ACTION="query" NAME="getLDAP" START="DC=info,DC=sys" SCOPE="subtree" STARTROW="1" maxRows="1"
SERVER="#domainCONTROLLER#" USERNAME="#USERNAME#" PASSWORD="#PASSWORD#" PORT="389" TIMEOUT="60"
ATTRIBUTES="sAMAccountName,mail,name,givenName,middleName,sn,title,department,ObjectGUID"
FILTER="sAMAccountName=#session.username#"
returnAsBinary = "ObjectGUID">

<cfset hexguid = BinaryEncode(getLDAP.objectguid,"Hex")>
<cfset sthex = toString(hexguid)>

<cfset GuidStr = mid(sthex,7,2)>
<cfset GuidStr = GuidStr & mid(sthex,5,2)>
<cfset GuidStr = GuidStr & mid(sthex,3,2)>
<cfset GuidStr = GuidStr & mid(sthex,1,2)>
<cfset GuidStr = GuidStr & mid(sthex,11,2)>
<cfset GuidStr = GuidStr & mid(sthex,9,2)>
<cfset GuidStr = GuidStr & mid(sthex,15,2)>
<cfset GuidStr = GuidStr & mid(sthex,13,2)>
<cfset GuidStr = GuidStr & mid(sthex,17,18)>
<cfset guid = left(GuidStr,8) & "-" & mid(GuidStr,9,4) & "-" & mid(GuidStr,13,4) & "-" & mid(GuidStr,17,4) & "-" & mid(GuidStr,21,18)>

Ваш более красноречивый.Спасибо!

0 голосов
/ 09 июня 2018

хммм ... последняя половина такая же

Интересно.Ссылка от этой темы объясняет почему.По-видимому, это более сложно, чем просто преобразование двоичного файла в гекс, за один выстрел :

  1. Во-первых, узнайте последовательность байтового индекса, который формирует пунктирную строку: [3] [2] [1] [0] - [5] [4] - [7] [6] - [8] [9] - [10] [11] [12] [13] [14] [15]
  2. Затем примените маскирование битов к каждому значению байта, доступ к которому осуществляется в массиве.
  3. Затем выполните преобразование в шестнадцатеричное представление значения.
  4. Просто убедитесь, что шестнадцатеричное значение представляет собой двузначное значение, означающее вместо «A», оно должно быть «0A»

Поскольку массивы CF основаны на 1, просто добавьте +1на позиции.Это создает декодированную строку в правильной последовательности (без черточек, которую можно легко добавить с помощью строковых функций).

 // Get GUID binary
 bin = yourQuery.objectGUID[rowNumber];
 // Extract bytes in this sequence
 order = [4,3,2,1, 6,5, 8,7, 9,10,11,12,13,14,15,16];
 // Stores converted bytes
 hex = [];

 for (pos in order) {
    // Apply mask to current byte and convert to hext 
    arrayAppend(hex, formatBaseN(BitAnd(bin[pos], 255), 16));
 }

 writeOutput("Hex string = "& arrayToList(hex, ""));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...