MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLテーブルのユーザーパスワード列をMD5からSHA256へ変換する方法

MySQLでMD5パスワードをSHA256に変換するには?

MD5形式で保存されたパスワードをSHA256に変換するには、SHA2()関数を使用します。この関数はSHA-2ファミリーのハッシュ関数(SHA-224、SHA-256、SHA-384、SHA-512)を計算でき、第2引数でビット長を指定します。

以下、実際の手順をサンプルコードとともに解説します。

1. テーブルを作成する

まず、パスワードを格納するためのテーブルを作成します。

mysql> create table DemoTable818(UserPassword text);
Query OK, 0 rows affected (0.51 sec)

2. サンプルデータを挿入する

INSERT文を使い、MD5()関数でハッシュ化したパスワードを登録します。

mysql> insert into DemoTable818 values(MD5('John_123'));
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable818 values(MD5('999Carol@22'));
Query OK, 1 row affected (0.14 sec)

3. 登録データを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable818;

実行結果は以下の通りです。32文字のMD5ハッシュが保存されていることがわかります。

+----------------------------------+
| UserPassword |
+----------------------------------+
| 47c7d0987db4e59e2264ce9fefce4977 |
| 950aa70edd5b686a807b3bfffdf2248c |
+----------------------------------+
2 rows in set (0.00 sec)

4. MD5をSHA256に変換するUPDATE文

以下のUPDATE文を実行すると、既存のMD5ハッシュがSHA256に一括変換されます。第2引数の「256」は、生成するハッシュのビット長を指定するものです。

mysql> update DemoTable818 set UserPassword=SHA2(UserPassword,256);
Query OK, 2 rows affected (0.19 sec)
Rows matched: 2 Changed: 2 Warnings: 0

5. 変換後のデータを確認する

もう一度テーブルの内容を確認します。

mysql> select *from DemoTable818;

実行結果を見ると、各レコードが64文字のSHA256ハッシュに更新されていることが確認できます。

+------------------------------------------------------------------+
| UserPassword |
+------------------------------------------------------------------+
| 8b68c46294a9ccb2449324c24fe774f95b7c14e4b56fc51c7f8e6c5b01c7020f |
| 9cc80741546051ae3de7d31246327968c98af3c65125376acb7b49a0760d42a3 |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)

補足:セキュリティ上の注意点

MD5は衝突耐性が低く、現在ではパスワードの保存用途には推奨されていません。SHA256への移行により安全性は向上しますが、「MD5ハッシュをさらにSHA256でハッシュする」方式は、平文パスワードから直接ハッシュし直す場合に比べるとベストプラクティスとは言えません。可能であれば、ユーザーに再ログインを促したタイミングで、ソルト付きのbcryptやArgon2などより強力なアルゴリズムを使ってパスワードを保存し直すことをおすすめします。

  1. MySQLのテーブル名に「user」は使える?予約語エラーの原因と回避方法を解説

    MySQLで「user」というテーブル名は使用できる?結論から言うと、「user」はMySQLの予約語(リザーブドワード)であるため、そのままテーブル名として使用することはできません。CREATE TABLE文などで「user」を使おうとすると、構文エラーが発生します。この問題を回避するには、主に以下の2つの方法があります。テーブル名を「users」など別の名前に変更するバッククォート(`)で「user」を囲んで使用するバッククォートを使った例どうしても「user」という名前を使いたい場合は、次のようにバッククォートで囲みます。mysql> create table `user` ( .

  2. MySQL 8で「rank」を列名として使える?予約語エラーの原因とバッククォートでの解決法

    MySQLでは、RANKはバージョン8.0.2から定義されている予約語(reserved word)です。そのため、「rank」をそのまま列名として使用することはできず、SQL構文エラーが発生します。この問題を回避するには、列名をバッククォート(`)で囲む必要があります。本記事では、実際にエラーが発生する例と、バッククォートを使った正しいテーブル作成・データ操作の手順を解説します。1. 動作環境の確認まず、使用しているMySQLのバージョンを確認しましょう。ここではMySQL 8.0.12を使用しています。mysql> select version(); +-----------+ |