계정 생성 중에 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
도구 파이프라인 사용: 필수OpenSSL무작위 문자 생성기로
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
플랫폼 전반에 걸쳐 더욱 강력하게 만드는 것이 더 나은 아이디어일까요?