2011-09-29 24 views
2

我已经创建了此函数来解密密码及其工作,但显示这样的奇怪字符��5d[���������。我正在使用oracle xe 10g解密功能 - 不显示可读字符串

create or replace 
function decrypt (val VARCHAR) return varchar2 is 

input_string varchar2(2048) := val; 
key_string VARCHAR2(10) := 'xpto'; 
decrypted_string VARCHAR2(2048); 

begin 

dbms_output.put_line(input_string); 

dbms_obfuscation_toolkit.DESDecrypt(
           input_string => input_string, 
           key_string => key_string, 
           decrypted_string => decrypted_string); 

dbms_output.put_line('> decrypted string output : ' || decrypted_string); 
return decrypted_string; 
end; 

我在做什么错误它应该出现一个可读的字符串。

+0

“奇怪的字符”出解密程序的手段,它是不工作的权利。任何密钥都会“解密”一个字符串,但只有一个密钥会生成原始文本。如果你得到垃圾,那么你做错了什么。 –

回答

3
  1. 为什么你需要解码密码?为什么不把它存储hashed

  2. 输入字符串的大小和密钥大小也有一些限制(在online doc中有解释)。

下面是与Oracle 10.2.0.3工作的例子:

SQL> VARIABLE v_in VARCHAR2(64); 
SQL> VARIABLE v_enc VARCHAR2(64); 
SQL> VARIABLE v_out VARCHAR2(64); 
SQL> DECLARE 
    2  l_key VARCHAR2(8) := rpad('my_key', 8, 'x'); -- 64-bit key 
    3 BEGIN 
    4  -- input size must be a multiple of 8 bytes 
    5  :v_in    := '12345678'; 
    6  :v_enc := dbms_obfuscation_toolkit.desEncrypt(input_string => :v_in, 
    7             key_string => l_key); 
    8  :v_out := dbms_obfuscation_toolkit.desDecrypt(input_string => :v_enc, 
    9             key_string => l_key); 
10 END; 
11/

PL/SQL procedure successfully completed 
v_in 
--------- 
12345678 
v_enc 
--------- 
þæHI«Ó¹- 
v_out 
--------- 
12345678 
+0

+1,工作实例都不错。 – DCookie