비밀번호 생성기 문제 bash 스크립트

비밀번호 생성기 문제 bash 스크립트

사용자에게 이름, 좋아하는 음식, 현재 날짜를 물어보고 이를 변수 food, date 및 name에 저장한 다음 임의의 비밀번호를 생성하는 bash 스크립트를 만들려고 합니다. 사용자가 비밀번호를 잊어버린 경우 동일한 이름(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)" }

관련 정보