PL/SQLで文字列の暗号化&複合化
Oracleを使った文字列暗号化を検証してます。
下のサンプルは文字列を暗号化して、暗号化したものを複合化してリターンさせてます。
CREATE OR REPLACE FUNCTION test_encrypt(target VARCHAR2) RETURN RAW
IS
encrypt_key VARCHAR2(2000) := '12345';
wk_encrypt_key VARCHAR2(2000) := NULL;
wk_padded_encrypt_key RAW(2000) := NULL;
wk_target VARCHAR2(2000) := NULL;
wk_padded_target RAW(2000) := NULL;
wk_multiple_of_eight INTEGER := 0;
encrypted_text RAW(2000) := NULL;
ret_target RAW(2000) := NULL;
ret_target2 VARCHAR2(2000) := NULL;
BEGIN
wk_encrypt_key := UTL_RAW.CAST_TO_VARCHAR2(encrypt_key);
wk_multiple_of_eight := (FLOOR(LENGTHB(wk_encrypt_key)/8 + .9)) * 8;
wk_encrypt_key := RPAD(wk_encrypt_key,wk_multiple_of_eight);
wk_padded_encrypt_key := UTL_RAW.CAST_TO_RAW(wk_encrypt_key);
wk_target := target;
wk_multiple_of_eight := (FLOOR(LENGTHB(wk_target)/8 + .9)) * 8;
wk_target := RPAD(wk_target,wk_multiple_of_eight);
wk_padded_target := UTL_RAW.CAST_TO_RAW(wk_target);
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
INPUT => wk_padded_target,
KEY => wk_padded_encrypt_key,
ENCRYPTED_DATA => encrypted_text
);
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
INPUT => encrypted_text,
KEY => wk_padded_encrypt_key,
DECRYPTED_DATA => ret_target
);
ret_target2 := UTL_RAW.CAST_TO_VARCHAR2(ret_target);
RETURN ret_target2;
END;
/
show errors
で、エラーを表示させるのがやっと。
DBMS_OUTPUT.PUT_LINE
ってのも使えるみたいですが
SET SERVEROUT ON
を、設定してもなぜか出力されなかった。
よーわからん。
ちなみに上のFunctionの使い方は、
SELECT test_encrypt(3584000000000103) FROM DUAL ;
みたいな感じで使います。
これ作るだけでかなり時間使ってしまった。。