转换SID到byte数组
/*
<Domain/Machine>\Administrator
' Pos : 0 | 1 | 2 3 4 5 6 7 | 8 9 10 11 | 12 13 14 15 | 16 17 18 19 | 20 21 22 23 | 24 25 26 27
' Value: 01 | 05 | 00 00 00 00 00 05 | 15 00 00 00 | 06 4E 7D 7F | 11 57 56 7A | 04 11 C5 20 | F4 01 00 00
' str : S- 1 | | -5 | -21 | -2138918406 | -2052478737 | -549785860 | -500
' SID anatomy:
>> ' Byte Position
>> ' 0 : SID Structure Revision Level (SRL)
>> ' 1 : Number of Subauthority/Relative Identifier
>> ' 2-7 : Identifier Authority Value (IAV) [48 bits]
>> ' 8-x : Variable number of Subauthority or Relative Identifier (RID)
>> [32 bits]
*/
public byte[] ConvertSID2Bytes(string sid)
{
sid = sid.ToLower().Replace("s", "");
string[] list = sid.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder();
sb.Append(String.Format("{0:X2}", Convert.ToInt32(list[0])));
sb.Append(String.Format("{0:X2}", Convert.ToInt32(list.Length - 2)));
sb.Append(String.Format("{0:X12}", Convert.ToInt32(list[1])));
Console.WriteLine(sb.ToString());
for (int i = 2; i < list.Length; i++)
{
string tmp = String.Format("{0:X8}", Convert.ToUInt32(list[i]));
for (int j = 6; j >= 0; j -= 2)
{
sb.Append(tmp.Substring(j, 2));
}
}
string obj = sb.ToString();
byte[] ret = new byte[obj.Length / 2];
for (int i = 0; i < obj.Length; i += 2)
{
ret[i / 2] = Convert.ToByte(obj.Substring(i, 2), 16);
}
return ret;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?