我试过pwgen
和makepasswd
来生成密码.但这些不足以产生准确的文字和数字..。
pwgen -c -n -y -B 12 1
这不像预期的那样工作,因为我不能定义最小数字计数.我想定义每种文字中允许的最小和最大字符.crunch
有这个特性吗?你还有什么其他的工具吗?最受欢迎的shell脚本..。(带regex)
提前感谢
发布于 2020-07-02 15:00:23
只需运行它,直到它工作(在一个新版本的bash,它支持=~
的regex匹配):
unset pass;
until [[ \
$pass =~ [0-9].*[0-9] &&
$pass =~ [A-Z].*[A-Z] &&
$pass =~ [^A-Za-z0-9] \
]]; do
pass=$(LC_ALL=C pwgen -c -n -y -B 12 1)
done
例如:
$ unset pass; until [[ $pass =~ [0-9].*[0-9] && $pass =~ [A-Z].*[A-Z] && $pass =~ [^A-Za-z0-9] ]]; do pass=$(LC_ALL=C pwgen -c -n -y -B 12 1); done; echo $pass
AhP4eej3bie#
请注意,我将“符号”定义为“不是字母,也不是数字”。如果你喜欢的话,你可以选择更有限制性的东西。
如果您的shell不支持regex匹配,请尝试:
$ perl -le 'until ($pass =~ /\d.*\d/ && $pass =~ /[A-Z].*[A-Z]/ && $pass =~ /[^A-Za-z0-9]/){chomp($pass=`LC_ALL=C pwgen -c -n -y -B 12 1`)}; print "$pass"'
iep7EJ-o9ahf
发布于 2020-07-02 20:06:00
如果您安装了带有Perl模式的grep,则可以根据约束生成密码。
$ < /dev/urandom \
tr -cd '[:alnum:][:punct:]' | fold -w 12 |
grep -Pm1 '(?=.*[[:upper:]].*[[:upper:]])(?=.*[[:digit:]].*[[:digit:]])(?=.*[[:punct:]])'
A09B?~WR~$#J
https://unix.stackexchange.com/questions/596332
复制相似问题