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