如何在 Linux 中创建强密码?

Gas*_*uma 26 security users password

我想知道如何在 Linux 上创建强密码(对于普通用户和管理员用户),以及是否有特定的程序可以做到这一点。

the*_*ive 24

pwgen是众多生成密码的程序之一


Hem*_*ant 18

就个人而言,我不喜欢使用密码生成器,因为生成的密码很难记住,但一种便携的解决方案是使用/dev/urandom

创建不包含特殊字符的随机密码,长度为 10 个字符:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10` 
dyxJRKldvp
Run Code Online (Sandbox Code Playgroud)

这是通过从 /dev/urandom 抓取字节,删除不符合tr命令中指定模式的字节,并使用head.

创建包含特殊字符的随机密码,长度为 10 个字符:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
Run Code Online (Sandbox Code Playgroud)

这在tr删除不需要的字节后使用了一种略有不同的技术,因为其想法是强制它具有至少一个特殊字符。这是通过使用fold命令将行包装成 10 组,然后使用grep仅获取包含特殊字符的行来实现的。head然后获取满足要求的第一个密码。


小智 11

几年前我写了这个小脚本,从那时起就一直在使用它。如果有的话,这是对printfBASH 一个可爱的功能的有趣滥用和使用,不幸的是,我在脚本中很少看到它: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
Run Code Online (Sandbox Code Playgroud)


Sar*_*use 5

apg 如果您想要容易记住的密码,这不是一个糟糕的选择。

; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)
Run Code Online (Sandbox Code Playgroud)

请注意,根据,您的密码长度应至少为 12 个字符。