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

6
我想将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。感谢您的帮助。


LookupAccountSid() 是你的代码还是内置函数? - mason
2个回答

15

您应该使用来自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)

此外,如果要获取NT Authority\NetworkService的SID,则可以将第一行替换为:

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

除了初始化byte[]之外,已经准备就绪。 - Damon Drake
这段代码只能在Windows上工作,不过 :-( - Froggy

3

仅供参考,如果您想采用另一种方式(byte[]转为SID),请使用以下代码。在我的情况下,byte[]来自ManagementEventWatcher:

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

您可以直接使用 securityIdentifier.ToString() 将SID转换为字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接