使用此 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,它的工作是转换字符,以便所有字符都是可打印的(即,没有 控制字符)。

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

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

这个示例输出显示了相当不错的字符组合。需要注意的一点是,唯一的非字母数字字符是 /+

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

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

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

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

10 条评论

或者只是:$ pwgen 12

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

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

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

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

回复 作者 Tim Schaller

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

别忘了著名的“正确的马电池订书钉”漫画...

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 的数量是密码长度。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.