2013年2月24日日曜日

Oracle で暗号化

以前、Oracle 上で暗号化をしなければいけない案件があり、ちょっと苦労したのでメモ。トライしたのは、SHA1のハッシュ化です。

まず、DBMS_CRYPTOパッケージの HASH 関数を利用するために、Oracle アカウントに権限を設定します。

grant execute on DBMS_CRYPTO to MYACCOUNT;

DBMS_CRYPTOパッケージについては、PL/SQL から利用するサンプルはたくさん見つかったのですが、SQL のみで実行するサンプルがなかなか見つかりませんでした。試しに、以下の SQL で実行してみました。

select
UTL_RAW.CAST_TO_VARCHAR2(
  UTL_ENCODE.BASE64_ENCODE(
    DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('mypassword', 'JA16SJIS'), DBMS_CRYPTO.HASH_SH1)
  )
)
from dual;

そうすると、以下のエラーが出てうまくいきません。

「ORA-06553: PLS-221: 'HASH_SH1'がプロシージャではないか、または未定義です」

それは確かにそうなんですが。。。いろいろ調べた結果、DBMS_CRYPTO.HASH_SH1の値は3であることが判明しましたので、

select
UTL_RAW.CAST_TO_VARCHAR2(
  UTL_ENCODE.BASE64_ENCODE(
    DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('mypassword', 'JA16SJIS'), 3)
  )
)
from dual;

これでうまくいきました。ちなみに、

HASH_MD4 ・・・ 1
HASH_MD5 ・・・ 2
HASH_SH1 ・・・ 3

のようです。

0 コメント:

コメントを投稿