sha256()関数
意外とよく使います。
sha256ハッシュ化
-- sha256()関数の戻り値の型がbytea(バイナリ型)のためpsqlが暗黙的に
-- 16進数でのエンコーディング(テキスト型への変換)を行っているので、
-- 先頭にプレフィックス"\x"がついてきます。
-- ちなみに、pgAdmin 4では暗黙的変換が行われないので"binary data"と表示されます。
-- 次に記載した、encode()関数で変換する必要があります。
--
myposdb=# select sha256('ハッシュ化対象文字列');
sha256
--------------------------------------------------------------------
\x6b2ad05fb9541aa3a463ee62163644b26c96241a200d9b007f330b24414b36a8
(1 行)
-- 実際内部では以下のようになっているのです。
--
myposdb=# select encode(sha256('ハッシュ化対象文字列'),'hex');
encode
------------------------------------------------------------------
6b2ad05fb9541aa3a463ee62163644b26c96241a200d9b007f330b24414b36a8
(1 行)
myposdb=#
バイナリ文字列の16進エンコードとデコード
-- 当方のPostgreSQLの文字コードはUTF-8です
--
db=# select character_set_name from information_schema.character_sets;
character_set_name
--------------------
UTF8
(1 行)
-- encode()関数でhexを指定すると、16進表記での符号化で(text型)で出力してくれます
-- hexの他にbase64,escapeが使えます
-- 以下は'6番'をバイナリ―にキャストしたものをencodeパラメータに渡しています。
--
db=# select encode( '6番'::bytea, 'hex' );
encode
----------
36e795aa
(1 行)
-- decode()関数はtext型で指定した文字列をバイナリ(bytea)型で
-- 出力します。
db=# select decode( '36e795aa', 'hex' );
decode
------------
\x36e795aa
(1 行)
--
-- convert_from()関数でtext出力します
-- decode()の戻り値はバイナリーです。
--
db=# select convert_from(decode( '36e795aa', 'hex' ),'utf8');
convert_from
--------------
6番
(1 行)
db=#