[コマンド] ハッシュ値・強度別パスワード/パスフレーズ生成 早見メモ(Win/Mac/Linux)
Techハッシュ値やランダムなパスワードを発行したいとき、毎回コマンドを忘れるのでまとめておきます。Windows(PowerShell)・macOS・Linux(Ubuntu)の3環境ぶん。コピペ用の自分メモです。
ℹ️ 標準搭載のコマンドを優先。追加インストールが要るものはその旨を書いています。
1. ハッシュ値を出す
文字列のハッシュ(SHA-256)
Linux (Ubuntu)
echo -n "文字列" | sha256sum
# ハッシュだけ欲しいとき
echo -n "文字列" | sha256sum | awk '{print $1}'
macOS
echo -n "文字列" | shasum -a 256
# MD5 は md5sum ではなく md5
echo -n "文字列" | md5
Windows (PowerShell)
[BitConverter]::ToString(
[Security.Cryptography.SHA256]::Create().ComputeHash(
[Text.Encoding]::UTF8.GetBytes("文字列"))
).Replace("-","").ToLower()
-n(改行を付けない)を忘れると末尾の改行までハッシュされ、値が変わります。ここが一番のハマりどころ。
ファイルのハッシュ
Linux
sha256sum file.zip # md5sum / sha1sum / sha512sum も同様
macOS
shasum -a 256 file.zip # md5 file.zip も可
Windows
Get-FileHash -Algorithm SHA256 .\file.zip
:: コマンドプロンプト(CertUtil)なら
certutil -hashfile file.zip SHA256
2. ランダムパスワードを生成する
Linux / macOS(共通・openssl)
openssl rand -base64 12 # 短め(約16文字)
openssl rand -base64 24 # 標準(約32文字)
openssl rand -hex 16 # 16進32文字
記号を除いた英数字だけにしたい / 長さをきっちり決めたいとき:
# 英数字のみ20文字(macOSでは LC_ALL=C が必須。無いと illegal byte sequence)
LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 20; echo
# 記号入り24文字
LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^&*()_+=-' < /dev/urandom | head -c 24; echo
Windows (PowerShell)
暗号学的に安全な乱数(RNG)を使う方法。PowerShell 5.1 / 7 どちらでも動く書き方:
$bytes = [byte[]]::new(24)
[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
[Convert]::ToBase64String($bytes)
手軽な英数字版(※ Get-Random は暗号用途には非推奨。使い捨て向け):
-join ((48..57)+(65..90)+(97..122) | Get-Random -Count 20 | ForEach-Object {[char]$_})
本番の秘密鍵・パスワードは
Get-Randomではなく上の RNG 版を使うのが安全です。
3. パスフレーズ(単語をつなげる方式)
覚えやすく強い「correct-horse-battery-staple」型。おすすめは xkcdpass(要 Python)。
# インストール(pipx が手軽)
pipx install xkcdpass
xkcdpass -n 4 -d - # 4単語をハイフン区切り(標準)
xkcdpass -n 6 -d - # 6単語(強め)
追加インストールせずに、OS標準の単語辞書から作るなら:
# Linux (shuf は標準)
shuf -n 4 /usr/share/dict/words | paste -sd '-' -
# macOS (shuf が無いので gshuf か、下のワンライナー)
ruby -e 'puts File.readlines("/usr/share/dict/words").sample(4).map(&:strip).join("-")'
Windows は WSL か、xkcdpass(Python)を使うのが手っ取り早いです。
4. 強度の目安(エントロピー)
「どれくらいの長さ/単語数にすべきか」の目安。ビットは総当たりの強さの指標です。
| 種類 | 例 | だいたいのエントロピー |
|---|---|---|
| 英数字(62種) | 12文字 | 約 71 bit |
| 英数字(62種) | 20文字 | 約 119 bit |
| 記号入り(94種) | 16文字 | 約 105 bit |
| パスフレーズ | 4単語 | 約 52 bit |
| パスフレーズ | 6単語 | 約 78 bit |
ざっくりの指針:
- オンライン攻撃(試行回数が制限される)対策:50〜60 bit あれば十分
- オフライン攻撃(ハッシュ流出後の総当たり)対策:80 bit 以上を目安に(重要アカウント・鍵は 100 bit+)
メモ
- 文字列ハッシュは
echo -n(改行なし)を忘れない - macOS の
trはLC_ALL=Cを付けないとエラーになる - パスワード生成に
Get-Randomは暗号用途で使わない(RNG を使う) - base64 出力をさらにハッシュにかけて短くしない(文字種が減って弱くなる)
セキュリティ, コマンド, パスワード, ハッシュ