PostgreSQL

PostgreSQL SHA-256ハッシュ関数

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=#
スポンサーリンク
タイトルとURLをコピーしました