以前、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 コメント:
コメントを投稿