サイトをFreeBSD13+python3.9+Bottleで作り直すメモ(14) MYSQLで暗号化
- 公開日: 2023/01/21(土) 17:28[JST]
本サイトでは使っていないが、MySQLの暗号化、復号化でちょっとハマったのでメモ。
MySQL5以前では、 ENCODE 、 DECODE という関数が用意されており、これでテキストの暗号化と復号化ができるようになっていた。しかしMySQL8.0ではこの関数は廃止された。マニュアルによれば、代わりに AES_ENCRYPT('テキスト', 'パスワード') 、 AES_DECRYPT(data, 'パスワード') を使えとのこと。
AES_ENCRYPT の方は ENCODE と同様データの保存先をblob型にしておけばOK(ぐぐってみるとblob型だとデータが大きくなりすぎるから推奨されないっぽいけど短いテキストを対象とするならなら別にいいよね)。問題は AES_DECRYPT の方で、そのままだとバイナリデータになってしまう。テキストとして取り出すには CAST(AES_DECRYPT(data, 'パスワード') AS CHAR) として文字列に変換する必要がある。