bash를 사용하여 터미널에서 macOS와 유사한 비밀번호 생성

bash를 사용하여 터미널에서 macOS와 유사한 비밀번호 생성

계정 생성 중에 Apple이 요청하는 비밀번호 패턴을 따르는 비밀번호를 생성하고 싶습니다.

비밀번호 문자열 패턴은 다음과 같습니다 xxxxxx-xxxxxx-xxxxxx. 그 중 하나 x는 숫자이고 하나 x는 대문자입니다.하이픈도 포함해야 합니다.

결과는 다음과 같습니다. abcdef-ghijk3-mnoPqr- 3숫자는 어디에 있고 P대문자는 어디에 있습니까?

유효한 출력은 다음과 같습니다:

  • abcdef-ghijk1-mnoPqr( 1그리고 P)
  • abcd3F-ghijkl-mnopqr( 3그리고 F)
  • abcdef-Ghijkl-mn0pqr( G그리고 0)
  • abcdef-nhijk1-mnqrX( 1그리고 X)

잘못된 출력은 다음과 같습니다.

  • aBCD3f-Nh1jk1-Mn0qr
  • AbcDwF-gH1jJl-mn0FqR

sed일반적인 bash 명령 이나 이와 유사한 명령을 사용하여 이 작업을 어떻게 수행합니까 awk?

답변1

내 경고 댓글에도 불구하고,그리고

rndchar() {
    local i=$(( 1 + RANDOM % $# ))
    echo "${!i}"
}

makepasswd() {
    local chars=()
    for i in {1..16}; do chars+=("$(rndchar {a..z})"); done
    chars+=("$(rndchar {A..Z})")
    chars+=("$(rndchar {0..9})")

    mapfile -t chars < <(printf '%s\n' "${chars[@]}" | shuf)

    local IFS=
    printf '%s-%s-%s\n' "${chars[*]:0:6}" "${chars[*]:6:6}" "${chars[*]:12:6}"
}

그 다음에

$ for in in {1..5}; do makepasswd; done
qek5qo-Mfwtqm-ujwrni
zkcfjd-gDgleh-zklhk2
Qureng-alsyus-y8nbvp
lbkusw-fSkqua-ghws4x
uKope4-vrzeqm-iwidgw

도구 파이프라인 사용: 필수무작위 문자 생성기로

makepasswd() {
    (   chars=$(openssl rand -base64 1024)
        tr -cd '0-9' <<<"$chars" | head -c 1
        tr -cd 'A-Z' <<<"$chars" | head -c 1
        tr -cd 'a-z' <<<"$chars" | head -c 16
    ) | sed 's/./&\n/g' \
      | shuf \
      | paste -d '' - - - - - - \
      | paste -d '-' - - -
}
$ for in in {1..5}; do makepasswd; done
aubbbm-qelNvl-0mbhbf
zyqvon-oqifkv-fkbgW2
wtzqpo-yl0mce-xaquhQ
xljzp8-xdfoeW-wxokxf
cqydyt-f6mwmn-vqLkce

답변2

openssl사용하진 않았지만 사용했어요 /dev/urandom.

#!/usr/bin/env bash

makepasswd() {
    (   chars=$(LC_ALL=C tr -dc a-zA-Z0-9 </dev/urandom | head -c 2000 ; echo '')
        tr -cd '0-9' <<<"$chars" | head -c 1
        tr -cd 'A-Z' <<<"$chars" | head -c 1
        tr -cd 'a-z' <<<"$chars" | head -c 16
    ) | sed 's/./&\n/g' \
      | shuf \
      | paste -d'\0' - - - - - - \
      | paste -d'-' - - -
}

for in in {1..5}; do makepasswd; done

플랫폼 전반에 걸쳐 더욱 강력하게 만드는 것이 더 나은 아이디어일까요?

관련 정보