百聞は一見に如かず。MySQLの標準関数で実装できるなんて便利です。
注:本記事は、データベースの暗号化ではなく、カラム(項目)単位です。
サンプル用のテーブル作成
DROP TABLE IF EXISTS `encrytest`;
CREATE TABLE `encrytest` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Value1` varchar(200) DEFAULT NULL,
`Value2` varchar(200) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
サンプルデータの登録
INSERT INTO ENCRYTEST (VALUE1,VALUE2) VALUES (HEX(AES_ENCRYPT('AIUEO','CRYPTKEY')),'KAKIKUKEKO');
データ読み出し (そのまま読みだしてみる。
SELECT ID , VALUE1,VALUE2 FROM ENCRYTEST;
+----+----------------------------------+------------+
| ID | VALUE1 | VALUE2 |
+----+----------------------------------+------------+
| 1 | E50F8C75A2C25FC6C8CDF8AA10C78B41 | KAKIKUKEKO |
+----+----------------------------------+------------+
1 row in set
データ読み出し(復号化して読みだす
SELECT ID , AES_DECRYPT(UNHEX(VALUE1),'CRYPTKEY') AS VALUE1,VALUE2 FROM ENCRYTEST;
+----+--------+------------+
| ID | VALUE1 | VALUE2 |
+----+--------+------------+
| 1 | AIUEO | KAKIKUKEKO |
+----+--------+------------+
1 row in set
その他メモ
HEXで保存するので、保存に必要なバイト数は、増えます。
※計算してませんが、4倍程度?
他のBlogなどを参照すると、blogを使うとか、bigbinaryを使うとか、
色々とアドバイスが出ています。
今回は、HEX,UNHEXを使っていますが、blobとかだとそれは必要なさそう。
0 件のコメント:
コメントを投稿