首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成至少2个数字、2个大写、1个符号、x较低的alpha和最大长度为16的密码。

生成至少2个数字、2个大写、1个符号、x较低的alpha和最大长度为16的密码。
EN

Unix & Linux用户
提问于 2020-07-02 14:48:19
回答 2查看 202关注 0票数 0

我试过pwgenmakepasswd来生成密码.但这些不足以产生准确的文字和数字..。

代码语言:javascript
运行
复制
pwgen -c -n -y -B  12 1

这不像预期的那样工作,因为我不能定义最小数字计数.我想定义每种文字中允许的最小和最大字符.crunch有这个特性吗?你还有什么其他的工具吗?最受欢迎的shell脚本..。(带regex)

提前感谢

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-07-02 15:00:23

只需运行它,直到它工作(在一个新版本的bash,它支持=~的regex匹配):

代码语言:javascript
运行
复制
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

例如:

代码语言:javascript
运行
复制
$ 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匹配,请尝试:

代码语言:javascript
运行
复制
$ 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
票数 2
EN

Unix & Linux用户

发布于 2020-07-02 20:06:00

如果您安装了带有Perl模式的grep,则可以根据约束生成密码。

代码语言:javascript
运行
复制
$ < /dev/urandom \
   tr -cd '[:alnum:][:punct:]' | fold -w 12 |
   grep -Pm1 '(?=.*[[:upper:]].*[[:upper:]])(?=.*[[:digit:]].*[[:digit:]])(?=.*[[:punct:]])'

A09B?~WR~$#J
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/596332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档