PostgreSQL / MySQL / MariaDB のパスワードハッシュ
エンコード処理はすべてブラウザ内で完結します。データは送信されません
3つのデータベースの「パスワード列に実際に何が入っているか」を計算します。これらの方式はいずれも新規システムに使うべきものではありません —— PostgreSQL の md5 は反復なしの md5 一回きり、MySQL の `PASSWORD()` は関数自体が削除され、二重 SHA-1 もとうに不十分です —— しかしそれらは今も無数の `pg_authid` や `mysql.user` の行、そして各地のセットアップスクリプトの中に残っています。ユーザーを旧データベースから移行する、あるいは1件のレコードを手で直すには、この値を計算できる必要があります。PostgreSQL の場合は特に注意が必要です:ユーザー名をソルトとして使うため(ハッシュ = md5(パスワード + ユーザー名))、同じパスワードでもユーザー名が違えばまったく別のハッシュになります。別のユーザー名の下にそのまま移すと、ログインは必ず失敗します。
機能
- 3つの方言:PostgreSQL の md5、MySQL と MariaDB の mysql_native_password
- PostgreSQL は「パスワード + ユーザー名」で計算 —— ユーザー名が重要な理由も明記
- 各方言ごとに、そのまま実行できる SQL(ALTER USER / SET PASSWORD)を表示します
- ハッシュと SQL は別の行に表示され、それぞれ個別にコピーできます
- 非 ASCII のパスワードは UTF-8 バイトとして処理します
- 計算は端末内で完結し、パスワードが送信されることはありません
使い方
- データベースを選びます
- PostgreSQL の場合はユーザー名を入力します(ソルトとして使われます)
- パスワードを入力欄に貼り付けます
- ハッシュ、または SQL の行をコピーします
よくある質問
- PostgreSQL でユーザー名が必要なのはなぜですか?
- `md5` 方式がユーザー名をソルトに使うからです:`md5` + md5(パスワード + ユーザー名)。利点はソルト用の列を別途保存しなくてよいこと、代償は名前を変えるとパスワードが無効になることです —— ハッシュを別のユーザー名の下へ移しても、内側の md5 には古い名前が混ざったままなので、ログインは失敗します。ユーザー移行時によく踏む罠で、本ツールが画面上に明記しているのはそのためです。
- MySQL の PASSWORD() は削除されたはずですが、まだ使えますか?
- MySQL 8.0 で `PASSWORD()` 関数は削除されましたが、`mysql_native_password` プラグイン自体は残っています(既定が `caching_sha2_password` に変わっただけです)。本ツールが計算するのはそのプラグインが期待する値、つまりアスタリスク + 二重 SHA-1 の大文字16進数です。MySQL 8.0 のユーザーに設定するには `IDENTIFIED WITH mysql_native_password AS '…'` を使います —— 本ツールが提示する SQL はまさにこれです。
- これらの方式は安全ですか?
- 安全ではなく、新規システムには使えません。PostgreSQL の md5 は反復なしの md5 一回で、現代の GPU は毎秒数十億回を計算します。MySQL の二重 SHA-1 は層を1つ増やしていますが、意図的に遅くしたハッシュの強度には遠く及びません。より根本的な問題は、どちらも適切にソルトを付けていないことです(PostgreSQL の「ソルト」はユーザー名で、公開されており固定です)。レインボーテーブルがそのまま通用します。新規には bcrypt・scrypt・Argon2id を使ってください —— いずれも本サイトにツールがあります。本ツールは移行のためのもので、新規作成のためではありません。
関連ツール
Bcrypt
エンコードbcrypt のパスワードハッシュ($2y$)を生成、または既存のハッシュと照合します。コスト係数は変更でき、すべてブラウザ内で完結します。
Scrypt
エンコードscrypt のパスワードハッシュ(PHC 形式)を生成・検証します。出力は PHC / 16進数 / Base64 から選択でき、メモリが上限を超える場合は明示します。
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。