shell随机生成多组高强度密码

Z先森 2018-11-29 PM 1918℃ 0条

场景

之前写过一个生成高强度随机密码的脚本,但是shell和很多语言一样,在同一个脚本内使用多次生成随机密码的方法,生成出来的结果不变化,原因是存入了变量,但是变量值未进行重置,尝试了很多方法未果,最后曲线救国,生成密码位数*密码组数长度的高强度密码,然后再拆分,脚本做了如下变通:

之前的密码生成脚本

function get_random()
{
MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~^&*_+="
LENGTH="$1"
while [[ "${n:=1}" -le "$LENGTH" ]]
do
  PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
    let n+=1
done
}
get_random $1

添加如下内容

PW_LENTH="20"
PW_COUNTS="5"
echo "$PASS" | fold -w${PW_LENTH}

新脚本如下

PW_LENTH="20" #每个密码长度20
PW_COUNTS="5" #生成5组密码
function get_random()
{
MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~^&*_+="
LENGTH="$1"
while [[ "${n:=1}" -le "$LENGTH" ]]
do
  PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
    let n+=1
done
}
get_random "$(expr ${PW_LENTH}*${PW_COUNTS})" #生成20*5位数的高强度密码
echo "$PASS" | fold -w${PW_LENTH}  #将20*5位数的密码拆分成5份

20190105更新新的方法

function get_random()
{
MATRIX="23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz~^&*_+="
LENGTH="$1"
echo $MATRIX | fold -w1 | shuf | head -n $LENGTH |tr -d '\n'
}

原理:将设定的字符串顺序打乱,然后取前N位,解决了之前版本由于变量导致同一个脚本里面多次调用方法生成的密码相同的问题,新的方法调用多次生成的密码都不一样。

标签: shell

如无特殊说明,本博所有文章均为博主原创。

评论啦~