将SID字符串格式转换为字节数组

时间:2014-07-09 16:16:21

标签: c# .net sid

我想将SID字符串格式转换为字节数组表示形式,然后将其提供给C#中LookupAccountSid()方法的第二个参数。但我没有找到任何可以做到这一点的内置功能。例如:

  

SID = S-1-5-32-544

可以转换为:

  

(SID:1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)

我在一些帖子中看到了它。但怎么样? 有没有简单的方法来实现这一目标?基本上我想要NT Authority\NetworkService的字节数组表示SID = S-1-5-20。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

您应该使用System.Security.Principal命名空间中的SecurityIdentifier对象:

var sid = new SecurityIdentifier("S-1-5-32-544");
byte[] bytes = new byte[sid.BinaryLength];
sid.GetBinaryForm(bytes, 0);

如果您想将其作为文本,则可以:

string strsid = string.Format("(SID: {0})", string.Join(",", bytes ));

完全产生:

  

(SID:1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)

此外,如果您希望SID为NT Authority\NetworkService,则可以将第一行替换为:

var sid = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null);

答案 1 :(得分:0)

仅供参考,如果您想采用其他方式(SID的字节[]),就是这样。就我而言,byte []来自ManagementEventWatcher:

ManagementBaseObject ne = e.NewEvent;
var securityIdentifier = System.Security.Principal.SecurityIdentifier((byte[])ne.Properties["SID"].Value, 0);

您可以只使用securityIdentifier.ToString()来获取SID作为字符串。