密码生成器问题 bash 脚本

密码生成器问题 bash 脚本

我正在尝试制作一个 bash 脚本,该脚本将询问用户的姓名、最喜欢的食物和当前日期,并将这些内容保存到变量 food、date 和 name 中,然后将生成随机密码。当用户忘记密码时,他所要做的就是输入相同的名称(userrecovery)、最喜欢的食物(foodrecovery)和生成密码的日期(daterecovery),并且应该显示密码。我用来生成随机密码的代码:

choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
  pass="$({ choose '!@#$%^\&'
   choose '0123456789'
   choose 'abcdefghijklmnopqrstuvwxyz'
   choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
      do
         choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      done
  } | sort -R | awk '{printf "%s",$1}')"

我尝试过类似的事情:

if [ $food=$foodrecovery -a $date=$daterecovery -a.... ]
   echo $pass

这是可行的,但是当我关闭脚本并重新打开它时,它将生成一个不应该生成的新密码。

答案1

每次运行时pass都会执行该脚本。您应该像您一样将其包装到函数中choose()。例如:

genpass()
{
 pass="$({ choose '!@#$%^\&'
   choose '0123456789'
   choose 'abcdefghijklmnopqrstuvwxyz'
   choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
      do
         choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      done
  } | sort -R | awk '{printf "%s",$1}')"
  echo "${pass}"
}

另一个注意事项;

$RANDOM应避免使用(参考)用于密码和加密密钥生成。

以下更简单且加密性更强;

choose(){ echo "$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)" }

相关内容