產生 8 - 16 之間隨機長度的密碼(我有產生器,但它不是動態的)

產生 8 - 16 之間隨機長度的密碼(我有產生器,但它不是動態的)

這是我的密碼產生器,它產生 8 個字元並對其進行隨機排列。但我需要使其動態長度。我該怎麼做呢?因此輸出的長度會有所不同,介於 8 - 16 個字元之間。

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)
lower2=${#lower[*]}   #${lower[$((RANDOM%lower2))]}
upper2=${#upper[*]}   #${upper[$((RANDOM%upper2))]}
num2=${#num[*]}     #${num[$((RANDOM%num2))]}
special2=${#special[*]} #${special[$((RANDOM%special2))]}

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

答案1

len=$((8+RANDOM%9))

然後$len使用一個框架生成字符,就像我在回答與您密切相關的問題時提供的框架一樣如何在此密碼產生器中僅產生一個特殊字符問題,

word=
for ((i=0; i<len; i++))
do
    thischar=(Generate one character by whatever logic you like)
    word="$word$thischar"
done
echo "$word"

我讓您決定如何產生各個字符,以便您獲得符合您喜好的字符組分佈。這超出了您的問題範圍,並且會涉及編寫您的要求(即編寫你的問題) 為你。

相關內容