최소 2개의 숫자, 2개의 대문자, 1개의 기호, x개의 소문자를 포함하고 최대 길이가 16인 비밀번호를 생성하세요.

최소 2개의 숫자, 2개의 대문자, 1개의 기호, x개의 소문자를 포함하고 최대 길이가 16인 비밀번호를 생성하세요.

비밀번호 pwgen생성을 시도했지만 ... 정확한 단어 및 숫자 수를 생성하기에는 충분하지 않습니다...makepasswd

pwgen -c -n -y -B  12 1

최소 숫자 수를 정의할 수 없기 때문에 예상대로 작동하지 않습니다.
각 텍스트 유형에 허용되는 최소 및 최대 문자를 정의하고 싶습니다... 이에 대한 기능이 있습니까
? 다른 제안 도구가 있습니까? 가장 널리 사용되는 쉘 스크립트... (정규식 사용)crunch

미리 감사드립니다

답변1

작동할 때까지 이것을 실행하십시오(정규식 일치를 지원하는 최신 버전의 bash에서 =~).

unset pass; 
until [[ \
        $pass =~ [0-9].*[0-9] && 
        $pass =~ [A-Z].*[A-Z] && 
        $pass =~ [^A-Za-z0-9] \
      ]]; do 
    pass=$(LC_ALL=C pwgen -c -n -y -B  12 1) 
done

예를 들어:

$ unset pass; until [[ $pass =~ [0-9].*[0-9] && $pass =~ [A-Z].*[A-Z] && $pass =~ [^A-Za-z0-9] ]]; do pass=$(LC_ALL=C pwgen -c -n -y -B  12 1); done; echo $pass
AhP4eej3bie#

내가 "기호"를 "문자도 숫자도 아닌" 것으로 정의했다는 점에 유의하세요. 원하는 경우 더 제한적인 것을 선택할 수 있습니다.

쉘이 정규식 일치를 지원하지 않는 경우 다음을 시도하십시오.

$ perl -le 'until ($pass =~ /\d.*\d/ && $pass =~ /[A-Z].*[A-Z]/ && $pass =~ /[^A-Za-z0-9]/){chomp($pass=`LC_ALL=C pwgen -c -n -y -B  12 1`)}; print "$pass"'
iep7EJ-o9ahf
    

답변2

Perl 모드와 함께 GNU grep을 설치한 경우 제한 사항에 따라 비밀번호를 생성할 수 있습니다.

$ < /dev/urandom \
   tr -cd '[:alnum:][:punct:]' | fold -w 12 |
   grep -Pm1 '(?=.*[[:upper:]].*[[:upper:]])(?=.*[[:digit:]].*[[:digit:]])(?=.*[[:punct:]])'

A09B?~WR~$#J

관련 정보