我经常需要想出新的密码,其中一些需要比其他的更安全。当我要创建一个新的登录名时,我的大脑似乎经常一片空白,而这个简短的 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 只生成伪随机数,但这个脚本肯定比我自己做得好得多。
10 条评论