bashを使用して端末でmacOSに似たパスワードを生成する

bashを使用して端末でmacOSに似たパスワードを生成する

アカウント作成中にAppleが要求するパスワードパターンに従うパスワードを生成したいと思います。

パスワード文字列パターンは次のとおりですxxxxxx-xxxxxx-xxxxxx。そのうちの1つxは数字、1つxは大文字です。ハイフンも含める必要があります。

結果は次のとおりです。abcdef-ghijk3-mnoPqr-3数字はどこにあり、P大文字はどこにありますか?

有効な出力は次のとおりです。

  • abcdef-ghijk1-mnoPqr1そしてP
  • abcd3F-ghijkl-mnopqr3そしてF
  • abcdef-Ghijkl-mn0pqrGそして0
  • abcdef-nhijk1-mnqrX1そして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

プラットフォーム全体でより強力にする方が良いアイデアでしょうか?

関連情報