ORA_HASH ファンクション(ハッシュ値の取得)

ハッシュ値への変換 ( ORA_HASH ) Oracle 10g

書式
ORA_HASH(expr [,max_bucket, seed_value] )
  max_bucket デフォルト値:4294967295
  seed_value デフォルト値:0

ハッシュコードを計算する。(バケット数とシードが一緒であれば、同じ expr は同じハッシュ値を戻す)
そのためパスワードをハッシュに変換した形で格納する場合などに使用できる。(※)

(※) テキストで保持するよりは良い程度なので STANDARD_HASH Oracle 12c暗号化ツールキット鍵付きハッシュ HMAC(DBMS_CRYPTO) などのハッシュ値の方が安全性は高い。
暗号化ツールキットは Standard Edition でも使うことができ Advance Security Option ライセンスも不要

ORA_HASH 使用例

最大バケット 65535 、シード 1

SQL> select ORA_HASH('hoge', 65535, 1) from dual;
 
ORA_HASH('HOGE',65535,1)
------------------------
                    6477

最大バケット 65535 、シード 2

SQL> select ORA_HASH('hoge', 65535, 2) from dual;
 
ORA_HASH('HOGE',65535,2)
------------------------
                   60503

最大バケット 65535 、シード 1 (最初と同じ)

SQL> select ORA_HASH('hoge', 65535, 1) from dual;
 
ORA_HASH('HOGE',65535,1)
------------------------
                    6477  ← seed が同じなので常に同じハッシュ値

バケット数が1つ減る(65535⇒65534)、シード 1 とハッシュ値も違う値になる

SQL> select ORA_HASH('hoge', 65534, 1) from dual;
 
ORA_HASH('HOGE',65534,1)
------------------------
                   32897

利用されるシーン および ORA_HASH と DBMS_CRYPTO.HASH (MD5)

  • 不可逆変換関数なので、パスワードの確認などに使う場合には入力値を同じバケット数とシードでハッシュ値にしてからハッシュ値同士を比較する。
  • SQL を管理する SQL_TEXT の内容もハッシュ値で管理されている。バケット数を十分大きく取ればアプリケーションコードを特定する値としても使用できる。
  • ORA_HASH ファンクションの最大バケット数は 32 ビット(4,294,967,295) まで許可されている。
    暗号化パッケージ (DBMS_CRYPTO) の MD5 でのハッシュのビット数は 128 ビット(約 3.4E+38)である。
  • Oracle 9i 以前の場合には DBMS_UTILITY.GET_HASH_VALUE がある。ただバケット数に該当するものは 16 ビット相当である。
  • ORA_HASH は SQL のビルトイン関数であるため PL/SQL による DBMS_UTILITY.GET_HASH_VALUE や DBMS_CRYPTO パッケージを呼び出す場合に比べて格段に高速に処理される。

制限:今のところ BIN_TO_NUMNVL2 と同様 PL/SQL に組み込まれていない。 Oracle 10g

 


関連パッケージのライセンス

暗号化ツールキット (SE 版でも使用可能)
DBMS_CRYPTO ハッシュ / DBMS_CRYPTO 鍵付きハッシュ Oracle 10g
DBMS_OBFUSCATION_TOOLKIT 〜 Oracle 9i

関連 SQL 関数

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー