【发布时间】:2014-09-01 08:28:42
【问题描述】:
我想使用以下规则在 c 编程中验证密码。
至少一个大写单词
至少一个小写单词
至少一个数字
至少一个符号 (!@#$%^&*)
长度:8 - 32
我如何使用正则表达式或不使用它来做到这一点?
【问题讨论】:
-
那么你有什么尝试?有一些代码供我们查看吗?
-
你可能有一个循环并使用像isalpha(3)这样的宏;输入的是 UTF-8 吗?
-
我试过 (regcomp(&re,"^(?=(.*\d))(?=.*[a-z])(?=.*[A-Z])(?=.* [!@#$%^&*]).{8,32}$", REG_EXTENDED) != 0) 但它会生成错误代码 1。
-
顺便说一句,我认为这样的规则很烦人。它们迫使人们发明难以记住的密码或用相似的数字/符号简单地替换字母,这几乎不会增加任何安全性。我在这里完全同意的唯一规则是长度下限。同时,32 个字符的上限可能会限制一些想要使用密码或xkcd-style passwords 的人 - 那是什么原因?
-
我的意思是,这些规则对加强密码的安全性没有多大作用。您的规则将接受“P4$sw0rd”,但拒绝“a4nGL5eqHBjecY2U2Bai”或“20恐惧表达重要性”,这两种方法都更安全,而且后者的优点是更容易记住。
标签: c regex validation