如何使这个密码生成器生成随机密码

时间:2014-10-24 23:49:50

标签: bash

我是bash脚本的新手,需要帮助。 我有这个密码生成器脚本,它生成8个字符长的密码。我一直试图让它产生随机长度,但无法做到。拥有bash脚本知识的人能否给我一些关于如何做到这一点的建议?

这是我的剧本

if [ $# -eq 0 ]; then
num=("0" "1" "2" "3" "4" "5" "7" "8" "9")
special=("@" "#" "$" "%" "*" "-" "+")
upper=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
lower=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
length=(0 1 2 3 4 5 7 8)
length2=${#length[*]} #${lower[$((RANDOM%length2))])
lower2=${#lower[*]}   #${lower[$((RANDOM%lower2))]}
upper2=${#upper[*]}   #${upper[$((RANDOM%upper2))]}
num2=${#num[*]}     #${num[$((RANDOM%num2))]}
special2=${#special[*]} #${special[$((RANDOM%special2))]}
abc=`#${lower[$((RANDOM%lower2))]}`

echo "$word${special[$((RANDOM%special2))]}${num[$((RANDOM%num2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}$length" | fold -w 1 | shuf | tr -d '\n'
echo

fi

1 个答案:

答案 0 :(得分:1)

Bash的$RANDOM无法用于生成随机密码,因为它太可预测了。

要生成伪随机长度的更安全的密码,请使用

之类的内容
tr -cd 'a-zA-Z0-9@#$^*-+' < /dev/urandom | head -c $((RANDOM % 8 + 16))

当然,我很欣赏您只是为了学习目的而这样做,但是后来谷歌的人们如何在bash中生成随机长度的密码&#34;不应该得到一个不安全的算法作为他们的第一个结果。