我想知道如何在 Linux 上创建强密码(对于普通用户和管理员用户)以及是否有特定的程序可以做到这一点。
答案1
普世根是用于生成密码的众多程序之一
答案2
就我个人而言,我不喜欢使用密码生成器,因为生成的密码很难记住,但一种便携式解决方案是使用/dev/urandom
创建不包含特殊字符的随机密码,长度为 10 个字符:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
其工作原理是从 /dev/urandom 中抓取字节,删除不符合命令中指定模式的字节tr
,并使用head
.
创建包含特殊字符的随机密码,长度为 10 个字符:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
在删除不需要的字节后,这使用了一种略有不同的技术tr
,因为其想法是强制它至少具有一个特殊字符。这是通过使用fold
命令将行分成 10 组,然后使用 来grep
仅获取包含特殊字符的行来实现的。head
然后获取第一个符合要求的密码。
答案3
我几年前写了这个小脚本,从那时起就一直使用它。如果说有什么不同的话,那就是它是对 BASH 的一个有趣的滥用printf
,并且使用了 BASH 的一个可爱的功能,不幸的是我很少在脚本中看到它:typeset
。
#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org
typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
for ((j=0; j < $length; j++)); do
set=$(($RANDOM % 20))
if [ $set -le 6 ]; then o=65; l=26; # 35% uppercase
elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
elif [ $set -le 18 ]; then o=58; l=7; # 10% symbolic
elif [ $set -le 19 ]; then o=33; l=15; fi
ord=$(($o + $RANDOM % $l))
printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
done
echo
done
答案4
我还要添加KeePassX它让您可以选择使用系统熵来生成具有一些不错功能的强密码 - 所有这些都使用 GUI。它还为您提供了管理密码并将其保存到加密文件的选项。
KPX 密码生成器界面如下所示: