2012-07-20 12 views
17

Vorrei convertire il SID del tipo System.Byte [] in una stringa.Come convertire SID in stringa .net

Il mio codice:

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

ho provato con questo, ma ottiene i valori dal dominio Sono attualmente collegato, e ho bisogno di un determinato dominio.

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

risposta

34

Dai un'occhiata alla classe SecurityIdentifier. È quindi possibile fare cose semplici come,

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

Questo è ciò che ive fatto, dopo un po 'la lettura è sembrato più sicuro per memorizzare il valore in ottobre Se non si conoscono i server sull'altro lato. Il codice seguente mostra come fare per ottenere il risultato desiderato

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

Dopo carico la struttura in DirectoryEntry ....

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