c# - 以编程方式验证 Windows 密码策略?
问题描述
我有一个批量创建用户的应用程序(我知道不典型,但不是我的决定),目前,密码验证只是使用正则表达式完成。但具体要求可能会根据 PC 的设置而改变,对吧?那么有没有办法在 C# 中针对 PC 的密码策略测试给定的字符串?我希望能够做类似的事情:
bool isPasswordGood = TestPasswordComplexity("notAgoodPassword");
解决方案
这将取决于 Windows 中设置的安全策略。这通常使用 GUI 来设置安全策略,但您实际上可以从命令行导出设置,如下所示:
secedit.exe /export /cfg C:\temp\MySecurityPolicy.inf
注意:您可能需要以管理员身份运行命令提示符才能允许此操作(右键单击命令提示符图标并选择以管理员身份运行)。
这应该将您的设置保存在文本文件中(此处为MySecurityPolicy.inf)。该文件的第一部分应如下所示:
[Unicode]
Unicode=yes
[System Access]
MinimumPasswordAge = 0
MaximumPasswordAge = 365
MinimumPasswordLength = 12
PasswordComplexity = 0
PasswordHistorySize = 20
LockoutBadCount = 20
ResetLockoutCount = 10
LockoutDuration = 10
RequireLogonToChangePassword = 0
ForceLogoffWhenHourExpire = 1
NewAdministratorName = "LocalAdmin"
NewGuestName = "LocalGuest"
ClearTextPassword = 0
(...)
特别是我会想象第 6 行和第 7 行,MinimumPasswordLength
并且PasswordComplexity
会很有趣 - 这里有一些关于此的文档
一旦你了解了它是如何工作的,你应该能够创建一个简单的脚本或程序来读取这样的配置文件,并使用其中的信息来告知你的密码验证方法。也许只阅读第 6 行和第 7 行就足够了?
我意识到这可能不如直接从 C# 中查找策略设置好,但它至少会给您一个选择:现在,每当您需要检查要求时,运行一个将设置导出到已知文件的脚本,并从您的应用程序中重新评估它。
如果您也可以从您的应用程序运行导出过程(假设提升的权限要求不会造成麻烦),那么您应该能够自动化所有这些。否则,您可能必须手动导出策略文件,并将其存储在您的应用程序可以读取的位置。
推荐阅读
- mysql - Mysql:表中的索引和行顺序
- sql - 将时间变量放置到 smalldatetime 变量的最简单方法(仅时间部分保持日期)
- java - 如何检查哪个线程正在持有监视器?
- python - Python、Pandas、Selenium 在空单元格中追加/插入零
- c++ - C3536在初始化之前不能使用
- python - 单击按钮时没有反应
- c# - 使用 Web API C# 将对象作为 JSON 数据返回
- javascript - Vuex 和 firebase:用户 id 在 firebase 数据库中未定义
- python - 我无法通过 python 中的 Telethon API 从 Telegram 消息中读取或下载图像
- javascript - js如何将文本附加到字符串中的最后一个单词