この小さなスクリプトを使用してランダムなパスワードを生成しようとしています。
#!/bin/bash if [ -z $PASSWORD ]; then PASSWORD=$(date | md5sum | grep '[a-zA-Z1-9]') fi
しかし、これは次のような結果をもたらします。
15d020e6e8e6038ffb027323401ca9a9 -
私のパスワードフィールドには空白や記号を含めることはできません。
どうすれば解決できますか?私はgrep -oを試しましたが、成功しませんでした。
答え1
PASSWORD=$(date | md5sum | grep -o '[a-z0-9]*')
男 grep:
> Repetition
> A regular expression may be followed by one of several repetition
> operators:
> ? The preceding item is optional and matched at most once.
> * The preceding item will be matched zero or more times.
答え2
出力から実際の要約を解析する方法はいくつかありますmd5sum
。
grep -E -o '[[:alnum:]]+'
、これは出力の英数字部分を返しますmd5sum
が、出力に存在する場合はファイル名ビットも提供します(ファイル名が標準入力であるため質問ではありません-
)。cut -d ' ' -f 1
、最初の空白文字の前の出力ビットのみを返します。これは間違いなく「ネイキッド」MD5ダイジェスト文字列を取得する最も一般的な方法です。- テーマのバリエーションには、次のものが
cut
含まれます。awk '{ print $1 }'
pwgen
パスワード生成の場合は、MD5ダイジェストの代わりにMD5ダイジェストを使用することをお勧めします。主にMD5ダイジェスト(任意のデータから計算されない限り)がランダムではないためです。
ハッカーは次のものを使用できます。
tr -dc '[:alnum:]' </dev/urandom | dd bs=1 count=32 2>/dev/null
これにより、英数字の文字ストリームが抽出され、32文字以上の文字列が破棄されます/dev/urandom
。dd
その逆dd
も使用できますhead -c 32
。
または以下を使用してくださいmd5sum
(この場合は1Kb以上のランダムデータ/dev/urandom
)。
dd if=/dev/urandom bs=1k count=1 | md5sum | cut -d ' ' -f 1
しかし実際にはpwgen
。
また、見ることができます/dev/random と /dev/urandom を使用する場合