28

SIDのSystem.Byte[]タイプを文字列に変換したいと思います。

私のコード:

string path = "LDAP://DC=abc,DC=contoso,DC=com";
DirectoryEntry entry = new DirectoryEntry(path);
DirectorySearcher mySearcher = new DirectorySearcher(entry);

mySearcher.Filter = "(&(objectClass=user)(samaccountname=user1))";
results = mySearcher.FindAll();
foreach (SearchResult searchResult in results)
{
    Console.WriteLine(searchResult.Properties["ObjectSID"][0].ToString());
}

これを試してみましたが、現在ログインしているドメインから値を取得し、特定のドメインから必要です。

System.Security.Principal.NTAccount(user1)
    .Translate([System.Security.Principal.SecurityIdentifier]).value
4

3 に答える 3

58

SecurityIdentifierクラスを見てください。次に、次のような簡単なことを行うことができます。

var sidInBytes = (byte[]) *somestuff*
var sid = new SecurityIdentifier(sidInBytes, 0);
// This gives you what you want
sid.ToString();
于 2012-07-20T13:39:39.777 に答える
1

これは、iveが行ったことです。ある程度読んだ後、値をoctに格納する方が安全であるように見えました。反対側にあるサーバーがわからない場合。以下のコードは、希望する結果を得るためにそれを行う方法を示しています

private static string ExtractSinglePropertyValueFromByteArray(object value)
{
    //all if checks etc has been omitted
    string propertyValue = string.Empty;
    var bytes = (byte[])value;
    var propertyValueOct = BuildOctString(bytes); // 010500....etc
    var propertyValueSec = BuildSecString(bytes); // S-1-5-...etc
    propertyValue = propertyValueSec;
    return propertyValue;
}

private static string BuildSecString(byte[] bytes)
{
    return new SecurityIdentifier(bytes,0).Value.ToString();
}

private static string BuildOctString(byte[] bytes)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < bytes.Length; i++)
    {
        sb.Append(bytes[i].ToString("X2"));
    }
    return sb.ToString();
}
于 2012-11-07T10:35:36.750 に答える
1

directoryEntryにプロパティをロードした後...。

var usrId = (byte[])directoryEntry.Properties["objectSid"][0];
var objectID = (new SecurityIdentifier(usrId,0)).ToString();
于 2018-01-10T19:20:27.603 に答える