🗂

PostgreSQLでハッシュ化したい

2025/03/03に公開

Daily Blogging72日目

クエリでデータを取ってくる時に、一部のデータだけハッシュ化したいんですけど可能ですか?
そう聞かれたのでやってみよう
今回はSHA-256でハッシュ化出来れば良い

pgcrypto

PostgreSQLのデフォルトでは、クエリ実行時にデータをハッシュ化してくれる機能はついていない。
しかし、pgcryptoと呼ばれる拡張機能を導入することによってハッシュ化が可能になる
https://www.postgresql.jp/docs/9.4/pgcrypto.html

ハッシュ化してみよう

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