2011-09-29 22 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