JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
標準化されている様々なハッシュ値の取得
STANDARD_HASH ( expr , [ hash_algorithm ] )
return [ raw ]
expr NULL を設定可能な式(数値式、文字列式、日付式、etc) hash_algorithm ハッシュアルゴリズム default 'SHA1'
式 expr を アルゴリズム hash_algorithm を使用しハッシュ化したバイナリ文字列を戻す。
SQL、埋め込みSQL で使用可能、PL/SQL に組み込まれていない。(Oracle 12c R2 時点)
ハッシュアルゴリズム
アルゴリズムには MD5、SHA1、SHA256、SHA384、SHA512 を使用可能 (Oracle 12c R2 時点)
NIST(National Institute of Standards and Technology / 米:国立標準技術研究所)にて標準化されたアルゴリズムなので STANDARD という接頭辞がついていると思われる。⇔ ORA_HASH 関数
STANDARD_HASH 関数の内容
LOB 型と LONG 型以外のメッセージ expr を 指定したハッシュアルゴリズム hash_algorithm を使用してハッシュ値に変換する。
ハッシュアルゴリズムの MD5 は 128 ビット、SHA-1 では 160 ビットのハッシュ値を戻す。SHA-2 では 256 / 386 / 512 ビットの 3種類があり SHA-2 の 512 ビットが一番強度が高い。
引数 expr に NULL を指定しても戻り値は NULL にならない。
DBMS_CRYPTO を使用するには実行権限の付与が別途必要だが、STANDARD_HASH は何もせずに使用できる。
ただし、DBMS_CRYPTO で使用可能な BLOB 型、CLOB 型 を取り扱うことはできない。
STANDARD_HASH の使用例
Database Characterset 文字列のハッシュ
SQL> select STANDARD_HASH ('ある文字列' , 'SHA256' ) from dual ;
STANDARD_HASH ('ある文字列' ,'SHA256' )
----------------------------------------------------------------
525066005B42EAB9F3618176C397D6E4DB4BDDBBDC8CB6CBE005C430FF32C593
National Characterset 文字列のハッシュ
同一文字列でも Database Characterset の文字列とは異なるハッシュ値となる。
SQL> select STANDARD_HASH (N'ある文字列' , 'SHA256' ) from dual ;
STANDARD_HASH (N'ある文字列' ,'SHA256' )
----------------------------------------------------------------
69CA7248066797F8294D0485212165FD18861D15C76052B959A1CC411261526E
TIMESTAMP のハッシュ
SQL> select STANDARD_HASH (systimestamp , 'SHA256' ) from dual ;
STANDARD_HASH (SYSTIMESTAMP ,'SHA256' )
----------------------------------------------------------------
2BB1BA4D1CF5EB0B5BDEFBD55920151D6D61436D4D9DAA1A8C5A01304AE840A9
NUMBER のハッシュ
SQL> select STANDARD_HASH (0, 'SHA256' ) from dual ;
STANDARD_HASH (0,'SHA256' )
----------------------------------------------------------------
76BE8B528D0075F7AAE98D6FA57A6D3C83AE480A8469E668D7B0AF968995AC71
NULL 値のハッシュ
SQL> select STANDARD_HASH (NULL, 'SHA256' ) from dual ;
STANDARD_HASH (NULL,'SHA256' )
----------------------------------------------------------------
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
同値でデータ型の異なるハッシュ値について
値は同じでも内部格納形式が異なる場合には別のハッシュ値となる。⇔ バイナリ値が同じであればデータ型が異なっていても同じハッシュ値となる。
単精度浮動小数点型 の 0 / 倍精度浮動小数点型 の 0 / NUMBER 型の 0 のハッシュ値
select
'NUMBER' data_type, dump (0, 16) dump_value,
STANDARD_HASH (0, 'SHA1' ) hash_value
from dual
union select
'BINARY_DOUBLE' , dump (to_binary_double (0), 16), STANDARD_HASH (to_binary_double (0), 'SHA1' )
from dual
union all select
'BINARY_FLOAT' , dump (to_binary_float (0), 16), STANDARD_HASH (to_binary_float (0), 'SHA1' )
from dual
union all select
'RAW_FLOAT' , dump (hextoraw ('80000000' ), 16), STANDARD_HASH (hextoraw ('80000000' ), 'SHA1' )
from dual
;
DATA_TYPE DUMP_VALUE HASH_VALUE
-------------- -------------------------------- ----------------------------------------
BINARY_DOUBLE Typ=101 Len=8: 80,0,0,0,0,0,0,0 E19F8C6041FD6C4202C739FA01BAF61235724B1E -- ↓と異なる
NUMBER Typ=2 Len=1: 80 C78EBD3C85A39A596D9F5CFD2B8D240BC1B9C125 -- ↓と異なる
BINARY_FLOAT Typ=100 Len=4: 80,0,0,0 E1798367D1B1ED54425E99F790A986C1FE939414 -- ↓と同じ
RAW_FLOAT Typ=23 Len=4: 80,0,0,0 E1798367D1B1ED54425E99F790A986C1FE939414 -- ↑と同じ
select
'DATE' data_type, dump (DATE '2000-01-01' , 16) dump_value ,
STANDARD_HASH (DATE '2000-01-01' , 'SHA1' ) hash_value
from dual
union all select
'RAW_DATE' , dump (hextoraw ('D007010100000000' ), 16),
STANDARD_HASH (hextoraw ('D007010100000000' ), 'SHA1' )
from dual
;
DATA_TYPE DUMP_VALUE HASH_VALUE
-------------- -------------------------------- ----------------------------------------
DATE Typ=13 Len=8: d0,7,1,1,0,0,0,0 74AAD6847433C93BB195396757AAECB6E1D2A87C -- ↓と同じ
RAW_DATE Typ=23 Len=8: d0,7,1,1,0,0,0,0 74AAD6847433C93BB195396757AAECB6E1D2A87C -- ↑と同じ
SHA256 や SHA512 でも同様の結果になる。
SQL 関数 - STANDARD_HASH 関連