- 它至少包含一个小写字母。
- 它至少包含一个数字,可以位于除第一个和最后一个位置之外的任何位置。
- 它至少包含一个特殊字符(非字母数字:即符号),可以位于除第一个和最后一个位置之外的任何位置。
- 它不包含用户 ID 中两个或多个字符的序列。
- 它不是用户 ID 的反转,也不包含用户 ID 的反转。
- 它不包含先前选择或给定密码中的三个或更多字符的序列。
- 它在密码中不会多次包含两个或多个字符的序列(例如,a39tzb39r)。
- 它不包含连续的三个或更多重复或连续数字或字符的序列(例如,ax222rm、ct15mnoRx)。
请让我知道单独测试这些的命令。
答案1
用正则表达式来做
1- 它至少包含一个小写字母。
[阿兹]
2-它至少包含一个数字,可以位于除第一个和最后一个位置之外的任何位置。
.[0-9].
3-它至少包含一个特殊字符ID,可以位于除第一个和最后一个位置之外的任何位置。
.[^a-z0-9A-Z]。
4- 它不包含用户 ID 中两个或多个字符的序列。
对于id的每2个字符(但我认为你的意思是用户名(与全名),因为id是数字的)((?!$ U)。)
5- 它不是用户 ID 的反转,也不包含用户 ID 的反转。
U=&(whoami | tac) ((?!$U).)
6- 它不包含先前选择或给定密码中的三个或更多字符的序列。
与#4相同
7- 密码中不得多次包含两个或多个字符的序列(例如,a39tzb39r)。 8- 它不包含连续的三个或更多重复或连续数字或字符的序列(例如,ax222rm、ct15mnoRx)。
(.{2,})\1
然后把它们放在一起;
回声 -n $PASS | grep -P '[az]' | grep -P '[az]' | grep -P '.[0-9].' | grep -P '.[^a-z0-9A-Z].' | grep -vP "((?!$U).)|$ETC"
扩展 $Us 是 for 循环,你应该能够弄清楚......但正如评论提到的,安全密码的唯一正确测试是它超过 14 个字符(并且加盐,并且最好限制 SSH 等密钥) )