解密函数 - 不显示可读字符串

时间:2011-09-29 16:09:39

标签: oracle

我创建了这个函数来解密密码及其工作,但是显示了像��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;

我做错了它应该是一个可读的字符串。

1 个答案:

答案 0 :(得分:3)

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

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

  3. 以下是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