Ответ 1
Взгляните на класс SecurityIdentifier. Затем вы можете делать простые вещи, например,
var sidInBytes = (byte[]) *somestuff*
var sid = new SecurityIdentifier(sidInBytes, 0);
// This gives you what you want
sid.ToString();
Я хотел бы преобразовать тип 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
Взгляните на класс SecurityIdentifier. Затем вы можете делать простые вещи, например,
var sidInBytes = (byte[]) *somestuff*
var sid = new SecurityIdentifier(sidInBytes, 0);
// This gives you what you want
sid.ToString();
Это то, что было сделано после некоторого чтения, было безопаснее хранить значение в окте. Если вы не знаете, какие серверы находятся на другой стороне. В приведенном ниже коде показано, как это сделать, чтобы получить желаемый результат.
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();
}
После загрузки свойства в directoryEntry....
var usrId = (byte[])directoryEntry.Properties["objectSid"][0];
var objectID = (new SecurityIdentifier(usrId,0)).ToString();