首页 > 解决方案 > 以编程方式验证 Windows 密码策略?

问题描述

我有一个批量创建用户的应用程序(我知道不典型,但不是我的决定),目前,密码验证只是使用正则表达式完成。但具体要求可能会根据 PC 的设置而改变,对吧?那么有没有办法在 C# 中针对 PC 的密码策略测试给定的字符串?我希望能够做类似的事情:

bool isPasswordGood = TestPasswordComplexity("notAgoodPassword");

标签: c#wpfwindowssecurityactive-directory

解决方案


这将取决于 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# 中查找策略设置好,但它至少会给您一个选择:现在,每当您需要检查要求时,运行一个将设置导出到已知文件的脚本,并从您的应用程序中重新评估它。

如果您也可以从您的应用程序运行导出过程(假设提升的权限要求不会造成麻烦),那么您应该能够自动化所有这些。否则,您可能必须手动导出策略文件,并将其存储在您的应用程序可以读取的位置。


推荐阅读