🗂
PostgreSQLでハッシュ化したい
Daily Blogging72日目
クエリでデータを取ってくる時に、一部のデータだけハッシュ化したいんですけど可能ですか?
そう聞かれたのでやってみよう
今回はSHA-256でハッシュ化出来れば良い
pgcrypto
PostgreSQLのデフォルトでは、クエリ実行時にデータをハッシュ化してくれる機能はついていない。
しかし、pgcryptoと呼ばれる拡張機能を導入することによってハッシュ化が可能になる
ハッシュ化してみよう
pgcryptoのハッシュ化は、digestで実現できる
digest(data, type)
data: ハッシュ化したい値
type: ハッシュ化のアルゴリズム
digestは複数のハッシュ化アルゴリズムを選択できる
- md5
- sha1
- sha224
- sha256
- sha384
- sha512
今回はsha256なのでこんな感じになる
digest(email, 'sha256')
見やすいように加工しよう
digest()は、バイナリハッシュと呼ばれる形式のデータを返すので、
そのままだと見づらいし扱いづらい。
encodeを使って加工しよう
用途に応じてハッシュ値を加工できるよ
- hex
- 16進数
- 可読性が高い
- base64
- バイナリデータを文字列に変換
- escape
- バイナリデータをエスケープされた文字列に変換
今回は16進数で見やすくしてみる
encode(digest(email, 'sha256'), 'hex') AS hashed_email
まとめ
最終的にこういう感じ
SELECT encode(digest(email, 'sha256'), 'hex') AS hashed_email FROM users
Discussion