在Windows操作系统中,用户SID用字符串表示,例如:
S-5-1-76-1812374880-3438888550-261701130-6117
有什么方法可以确定这样的字符串是有效的用户SID吗?
谢谢.
Ser*_*kiy 24
根据安全标识符描述,SID具有以下形式(它具有一到十四个子授权值):
S-1-<identifier authority>-<sub1>-<sub2>-…-<subn>-<rid>
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式来检查字符串是否与此模式匹配:
string input = "S-5-1-76-1812374880-3438888550-261701130-6117";
string sidPattern = @"^S-\d-\d+-(\d+-){1,14}\d+$";
bool isValidFormat = Regex.IsMatch(input, sidPattern);
Run Code Online (Sandbox Code Playgroud)
这将确保输入字符串具有有效格式,但这不能证明SID有效.正如评论中所建议的那样,如果您需要检查是否有有效的SID,则应尝试获取帐户.
我发现这种轻微变化很有帮助,它允许一些众所周知的安全标识符.例如,众所周知的sid Everyone S-1-1-0
^S-\d-(\d+-){1,14}\d+$
Run Code Online (Sandbox Code Playgroud)
依靠正则表达式来检查 SID 是否有效并不是一个好主意。一方面,唯一有效的 SID 版本是 1,因此S-9-(\d+-){1,14}\d+
当 9 不是有效版本时,此正则表达式将认为
有效。但是,如果出现新的 SID 版本甚至全新的 SID 格式,将正则表达式修复为仅允许版本 1 将失败。更好的方法是让系统决定 SID 是否有效。只需这样做:
string notSureIfSID = "S-9-5-76-1812374880-3438888550-261701130-6117";
bool sidIsValid = false;
bool sidIsAccount = false;
try {
SecurityIdentifier sid = new SecurityIdentifier(notSureIfSID);
sidIsValid = true;
sidIsAccount = sid.IsAccountSid();
}
catch (ArgumentException) {
// Handle invalid SID
}
Run Code Online (Sandbox Code Playgroud)
如果 SID 格式无效(例如,如果版本不是 1 或子权限的数量超过 15 或小于 1),构造函数将抛出 ArgumentException。如果你想检查SID是一个实际存在的账户,只需调用IsAccountSid上SecurityIdentifier。
| 归档时间: |
|
| 查看次数: |
6437 次 |
| 最近记录: |