MySQLで文字列を暗号化・復号化する方法|AES_ENCRYPT()とAES_DECRYPT()の使い方
MySQLでは、組み込み関数であるAES_ENCRYPT()とAES_DECRYPT()を使うことで、文字列を手軽に暗号化・復号化できます。この記事では、実際のSQL文と実行例を交えながら、その基本的な使い方を解説します。
暗号化・復号化の基本構文
データを挿入する際にAES_ENCRYPT()で暗号化し、取得する際にAES_DECRYPT()で復号化するのが基本の流れです。
INSERT INTO テーブル名 VALUES(AES_ENCRYPT(値, 秘密鍵));
SELECT CAST(AES_DECRYPT(カラム名, 秘密鍵) AS CHAR) FROM テーブル名;
暗号化されたデータはバイナリ形式になるため、格納先のカラムはBLOB型などバイナリデータを扱える型で定義しておく必要があります。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。ここでは「value」というBLOB型カラムを持つテーブルを定義します。
mysql> CREATE TABLE demo63
-> (
-> value BLOB
-> );
Query OK, 0 rows affected (2.60 sec)
暗号化しながらデータを挿入する
次に、INSERTコマンドを使ってレコードを追加します。ポイントは、値をそのまま挿入するのではなく、AES_ENCRYPT()で暗号化してから格納する点です。秘密鍵にはここでは「PASS」を使用しています。
mysql> INSERT INTO demo63 VALUES(AES_ENCRYPT('John','PASS'));
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO demo63 VALUES(AES_ENCRYPT('David','PASS'));
Query OK, 1 row affected (0.41 sec)
mysql> INSERT INTO demo63 VALUES(AES_ENCRYPT('123456','PASS'));
Query OK, 1 row affected (0.41 sec)暗号化された状態を確認する
SELECT文でテーブルの中身を表示してみましょう。
mysql> SELECT * FROM demo63;
実行結果は以下の通りです。元の文字列ではなく、16進数表記の暗号化データが格納されていることがわかります。
+------------------------------------+
| value |
+------------------------------------+
| 0x16D8A4F11321D761920783BF96BB8314 |
| 0x0A85099F705F21D27B0129C54C4473AA |
| 0xAB7C6D6068BC100B0F04D1C4EA068AC9 |
+------------------------------------+
3 rows in set (0.00 sec)
データを復号化して表示する
続いて、AES_DECRYPT()を使って暗号化されたデータを元の文字列に戻します。結果はバイナリとして返されるため、CAST関数でCHAR型に変換すると読みやすくなります。
mysql> SELECT CAST(AES_DECRYPT(value, 'PASS') AS CHAR) FROM demo63;
実行結果は以下の通りです。正しく元の文字列が復元されています。
+------------------------------------------+
| cast(aes_decrypt(value, 'PASS') AS CHAR) |
+------------------------------------------+
| John |
| David |
| 123456 |
+------------------------------------------+
3 rows in set (0.00 sec)
注意点
- 秘密鍵の管理: 秘密鍵が漏洩すると暗号化の意味がなくなります。ソースコードへの直書きは避け、環境変数や設定ファイルなど安全な場所で管理しましょう。
- カラムの型: 暗号化データは可変長のバイナリになるため、VARCHAR型ではなくBLOB型などのバイナリ対応カラムを使用するのが確実です。
- 検索の制限: 暗号化されたカラムは通常のLIKE検索やインデックスによる絞り込みができないため、検索が必要な項目は設計段階で考慮しておきましょう。
このように、AES_ENCRYPT()とAES_DECRYPT()を活用すれば、MySQL上で個人情報やパスワードなどの機密データを簡単に保護できます。ぜひ実際のプロジェクトでも活用してみてください。
-
Pythonでデータを暗号化・復号化する方法!cryptographyライブラリの使い方を徹底解説
はじめに暗号技術(クリプトグラフィー)とは何でしょうか?暗号技術とは、平文(プレーンテキスト)を暗号文(サイファーテキスト)に変換することを「暗号化」と呼び、逆に暗号文を平文に戻すことを「復号化」と呼びます。本記事では、Pythonの cryptography パッケージに含まれる Fernet モジュールを使用して、データの暗号化と復号化を行う方法を解説します。Fernetモジュールを使用すると、一意の鍵(キー)が生成され、この鍵がなければ暗号化されたデータを読み取ったり操作したりすることはできません。それでは、さっそく始めていきましょう。準備:cryptographyパッケージのインストー
-
Androidスマホでファイルを暗号化・復号化する完全ガイド
Androidデバイスでファイルを暗号化しておけば、万が一端末やデータが盗まれたとしても、正しい鍵で復号化されない限り中身を読み取られることはありません。暗号化とは、ファイルの中身を意味のわからない文字列に変換する仕組みで、一般的にはAES 128またはAES 256という強力な規格が使われています。この規格で暗号化された情報は、事実上解読不可能とされています。 この記事では、Androidデバイスでファイルを暗号化する方法を、端末全体を暗号化する場合と特定のファイルだけを暗号化する場合の2つのパターンに分けて、手順を詳しく解説します。 Android端末全体を暗号化する方法 最も包括的な