使用此 Bash 脚本生成随机密码

使用这个简单的 Bash 脚本,摆脱选择密码的烦恼。
212 位读者喜欢这个。
Password

freeGraphicToday,通过 Pixabay。 CC0。

我 периодически 需要想出新的密码,其中一些需要比其他的更安全。当我必须创建一个新的登录名时,我的大脑似乎经常一片空白,而这个简短的 Bash 脚本填补了这个空白。完全公开:我发现这个脚本的大部分内容都发布在某个地方,并对其进行了微小的修改。

#!/usr/bin/env sh
echo 'Generating 12-character passwords'
for ((n=0;n<12;n++))
do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-12
done

我不知道所有关于它是如何工作的细节,但我做了一些研究和实验。脚本的“核心”是在以 do dd 开头的行中。你可能见过 dd 用于将一个磁盘复制到另一个磁盘,但在本例中,它用于使用 dev/urandom 生成一个随机字符块。来自 dd 的反馈消息被剥离,然后字符被传递给 uuencode,它的工作是转换字符,使所有字符都可打印(即,没有 控制字符)。

可以通过安装 sharutils 软件包来获得 uuencode 命令。

sed 的工作似乎是进一步转换,使字母混合大小写。最后,cut 切掉 12 个字符,以 12 个字符的密码结尾。for 循环运行 12 次,所以你得到 12 个密码。

Generating 12-character passwords 
8WMKHeXeYsND 
X+V3jWOuBWwp 
fSk6inI+LfYP 
hIPndcBOSh7m 
bb/w9mx8OlHv 
hdIOibUaMt3Y 
wl//CobIG5bR 
dih0qQQMJiXw 
BIN2QfNA4jCe 
DF0c8Auz1qL4 
RM8MMq/D8C8H 
rZIG5hbghcMy

这个示例输出显示了相当好的字符混乱。需要注意的一件事是,唯一的非字母数字字符是 /+

当我需要新密码时,我会浏览这个输出,找到一个“吸引”我的密码。如果这是一个我经常使用的密码,我宁愿它是 一些我认为我最终可以记住的东西。

没有理由完全按字面意思使用这些密码;你可以根据需要添加或修改字符。我主要使用八个字符的密码。有些地方要求密码具有特定元素,例如至少一个小写字母、一个大写字母、一个数字和一个符号。

如果我不喜欢任何密码,我会再次运行脚本以生成另外 12 个。有人可能会评论说 dev/urandom 只生成伪随机数,但这个脚本肯定比我自己做得好得多。

接下来阅读什么
Greg Pittman
Greg 是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 20 世纪 60 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了学习更多知识并最终做出贡献的热情。他是 Scribus 团队的成员。

10 条评论

或者只是:$ pwgen 12

但是:“请注意,可发音密码生成方案存在安全漏洞(参见 Ganesan / Davis 的“对随机可发音密码生成器的新攻击”,载于“第 17 届全国计算机安全会议 (NCSC) 会议录,10 月 11-14 日,1994 年(第 1 卷)”,http://csrc.nist.gov/publications/history/nissc/ 1994-17th-NCSC-proceedings-vol-1.pdf,第 203-216 页)

另请注意,NIST 已于 2015 年撤回 1993 年的 FIPS 181 标准,没有取代的出版物。这意味着该文档被其发布者视为过时,并且未更新以引用当前的或修订的自愿行业标准、联邦规范或联邦数据标准。

自 2003 年以来,apg 一直没有受到上游关注,上游不回复电子邮件,并且上游网页看起来运行不正常。Debian 维护者计划在具有可比较功能集的实际维护软件可用后立即停止 apg 维护。”

https://packages.debian.org/buster/apg

回复 ,作者 Tim Schaller

很棒的脚本和概念!只是对 sed 命令的简短解释。
sed 命令选项是 -ne -n 表示不打印所有行,-e 表示使用以下选项作为命令,2p 表示仅打印 uuencode 输出的第二行,因为第一行和最后一行是标头和页脚。
Uuencode 输出大写和小写。

别忘了著名的“Correct Horse Battery Staple”漫画...

https://xkcd.com/936/

当被允许时,我更喜欢密码短语,因为长度确实有助于记住它们是什么,并且有助于整体安全性。

甚至不要让我开始谈论密码老化的罪恶...!

我认为这个更简洁。

alias pass1='echo -e "密码生成器\n";tr -cd [:alnum:] < /dev/urandom | fold -w16 | head -n1'

alias pass2='echo -e "最随机密码生成器\n";tr -cd [:alnum:][:punct:] < /dev/urandom | fold -w16 | head -n1'

或使用 mktemp -u XXXXXXXXXXXX。X 的数量是密码长度。

© . All rights reserved.