アカウント作成中にAppleが要求するパスワードパターンに従うパスワードを生成したいと思います。
パスワード文字列パターンは次のとおりですxxxxxx-xxxxxx-xxxxxx
。そのうちの1つx
は数字、1つ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
プラットフォーム全体でより強力にする方が良いアイデアでしょうか?