Teman2,
Saya mempunyai package sbb,sebagai informasi apabila saya menggunakan Oracle
Database 10g Enterprise Edition Release 10.1.0.2.0.
ada eror seperti diatas. Tp saya coba di database 9i, tidak ada masalah.
Mohon bantuannya kepada rekan2 sekalian, bila ada yg tau cara mengatasinya.
Terima kasih sebelumnya.
-- Package header
CREATE OR REPLACE PACKAGE MIRRORSYS.toolkit AS
FUNCTION encrypt (p_text IN VARCHAR2) RETURN VARCHAR2;
FUNCTION decrypt (p_raw IN VARCHAR2) RETURN VARCHAR2;
END toolkit;
-- Package body
-- Package Body
CREATE OR REPLACE PACKAGE BODY toolkit AS
g_key RAW(32767) := UTL_RAW.cast_to_raw('12345678');
g_pad_chr VARCHAR2(1) := '~';
PROCEDURE padstring (p_text IN OUT VARCHAR2);
--
--------------------------------------------------
FUNCTION encrypt (p_text IN VARCHAR2) RETURN VARCHAR2
IS
--
--------------------------------------------------
l_text VARCHAR2(32767) := p_text;
l_encrypted RAW(32767);
BEGIN
padstring(l_text);
DBMS_OBFUSCATION_TOOLKIT.desencrypt(input =>
UTL_RAW.cast_to_raw(l_text),key => g_key,
encrypted_data => l_encrypted);
RETURN l_encrypted;
END;
--
--------------------------------------------------
--
--------------------------------------------------
FUNCTION decrypt (p_raw IN VARCHAR2) RETURN VARCHAR2 IS
--
--------------------------------------------------
l_decrypted VARCHAR2(32767);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.desdecrypt(input =>
p_raw,
key =>
g_key,
decrypted_data
=> l_decrypted);
RETURN
RTrim(UTL_RAW.cast_to_varchar2(l_decrypted),
g_pad_chr);
END;
--
--------------------------------------------------
--
--------------------------------------------------
PROCEDURE padstring (p_text IN OUT VARCHAR2) IS
--
--------------------------------------------------
l_units NUMBER;
BEGIN
IF LENGTH(p_text) MOD 8 > 0 THEN
l_units := TRUNC(LENGTH(p_text)/8) + 1;
p_text := RPAD(p_text, l_units * 8, g_pad_chr);
END IF;
END;
--
--------------------------------------------------
END toolkit;
/
SQL> select branch_id, user_id, toolkit.encrypt(password) from m_user_system;
BRA USER_ID TOOLKIT.ENCRYPT(PASSWORD)
--- ----------------------------------------
-------------------------------------------------------
888 reka2 83220A4B17510E04BC93CE8BF322E950
888 aa 4BDC506014466A73
888 re 29816F4C8FFA41CF
888 cc 5206E93E1B30E08B6125B84E91589B01
DPK toni
5AEE323589D1C514C8E7D8AF3624E8DB942C46AE56F76A4A24F6FEFDE8D7C5CB2A551A75C0268D5D8
5 rows selected.
SQL> select branch_id, user_id, toolkit.decrypt(password) from m_user_system;
ERROR:
ORA-28232: invalid input length for obfuscation toolkit
ORA-06512: at "SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 40
ORA-06512: at "SYS.DBMS_OBFUSCATION_TOOLKIT", line 138
ORA-06512: at "MIRRORSYS.TOOLKIT", line 31
no rows selected
---------------------------------
Be a better Heartthrob. Get better relationship answers from someone who knows.
Yahoo! Answers - Check it out.
[Non-text portions of this message have been removed]