ランダムな文字列を生成する方法は?

ランダムな文字列を生成する方法は?

任意の文字列(パスワード、ユーザー名など)を生成したいと思います。希望の長さ(13文字など)を指定できる必要があります。

どのツールを使用できますか?

(セキュリティとプライバシーのために、ウェブサイトでオンラインで文字列を生成するのではなく、オフラインで文字列を生成する方がよいでしょう。)

答え1

私の好きな方法は、望ましくない文字を使用し/dev/urandomtr削除することです。たとえば、数字と文字のみを取得するには:

tr -dc A-Za-z0-9 </dev/urandom | head -c 13; echo

または、含むより多くのキャラクターOWASPパスワード特殊文字リスト:

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13; echo

tr入力について不満がある場合、追加してみてくださいLC_ALL=Cこのように:

LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13; echo

trより読みやすいグラフィック文字クラスもあります。これをCロケールに制限すると、上記の明示的な文字リストと同じタイプの出力が生成されます。

LC_ALL=C tr -dc '[:graph:]' </dev/urandom | head -c 13; echo

答え2

私はopenssl暗号のスイス軍用剣であるコマンドを使用しています。

openssl rand -base64 12

または

openssl rand -hex 12

答え3

任意のパスワードを生成するには、次のものを使用できます。pwgen:

pwgenランダムに意味はありませんが、発音可能なパスワードを生成してください。これらのパスワードには、小文字、大文字と小文字の混合、または数字のみが含まれます。大文字と数字は、単語だけを覚えても位置を覚えやすいように配置されています。

長さ13のパスワード7つを生成します。

geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he 

-s説明で述べたように、パラメータを使用すると、エントロピーの減少(つまり、より安全で完全にランダムですが覚えにくいパスワードの生成)を回避できます。

geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz 

brewユーザーの場合は、次を参照してください。ここ


任意のユーザー名を生成するには、次のものを使用できます。gpw:

このパッケージは発音可能なパスワードを生成します。入力した辞書から取得したトライグラム(3文字)の統計を使用します。

長さ13の7つのパスワード(ユーザー名)を生成します。

geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback

答え4

これを行う方法は次のとおりです。それが私がすることです。 10文字のランダムな文字列を生成します。 "fold"を他の文字列処理ツールに置き換えることで最適化できます。

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1

関連情報