【问题标题】:Validation password in c programming [duplicate]c编程中的验证密码[重复]
【发布时间】: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


【解决方案1】:

您可以尝试以下正则表达式来满足您的所有要求,

^(?=.{8,32}$)(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[(!@#$%^&*)]).*

DEMO

^(?=.{8,32}$)         -      length: 8 - 32
(?=.*?[A-Z])          -      at-least one uppercase letter.
(?=.*?[a-z])          -      at-least one lowercase letter.
(?=.*?[0-9])          -      at-least one number.
(?=.*?[(!@#$%^&*)])   -      at-least one symbol present inside the character class.
.*                    -      Match any character zero or more times only if all the above 5 conditions are true.

【讨论】:

  • ret = regcomp(&re,"^(?=.{8,32}$)(?=.*?[A-Z])(?=.*?[a-z])(?= .*?[0-9])(?=.*?[(!@#$%^&*)]).*", REG_EXTENDED) ,生成错误码1
  • 问题仅在于您的代码不在正则表达式中。请参阅演示站点..
  • 见这里regex101.com/r/iX8hF3/8。您的正则表达式无法匹配第二行..
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2020-07-25
  • 2012-09-18
  • 2014-12-12
  • 2021-12-23
  • 2020-12-26
相关资源
最近更新 更多