2012-07-20 5 views
17

Ich möchte den System.Byte [] -Typ der SID in einen String konvertieren.Wie konvertiert SID zu String in. NET

Mein Code:

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()); 
} 

Ich habe versucht, mit diesem aber es wird die Werte aus der Domäne I gerade angemeldet bin, und ich brauche von einer bestimmten Domäne.

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

Antwort

34

Werfen Sie einen Blick auf die SecurityIdentifier Klasse. Sie können dann einfach Dinge wie,

var sidInBytes = (byte[]) *somestuff* 
var sid = new SecurityIdentifier(sidInBytes, 0); 
// This gives you what you want 
sid.ToString(); 
1

Dies ist, was ive getan, nachdem ich einige Lesung es sicherer schien den Wert im Oktober zu speichern. Wenn Sie nicht wissen, welche Server auf der anderen Seite ist. Der folgende Code zeigt, wie es zu tun, um Ihr gewünschtes Ergebnis zu erhalten

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(); 
} 
0

Nach Last Eigentum in Directory ....

var usrId = (byte[])directoryEntry.Properties["objectSid"][0]; 
var objectID = (new SecurityIdentifier(usrId,0)).ToString(); 
Verwandte Themen