使用Oracle提供的DES算法编写了两个函数 
create or replace function econf_decrypt(
p_input_string in varchar2,
p_key_string in varchar2)
return varchar2
is
l_decrypted_value varchar2(512);
l_input_string varchar2(512);
l_key_string varchar2(512);
begin
  l_key_string:=rpad(p_key_string,16,chr(0)); 
  l_decrypted_value:=dbms_obfuscation_toolkit.DES3Decrypt(
                                                  input_string=>p_input_string,
                                                  key_string=>l_key_string);
  return l_decrypted_value;
end;create or replace function econf_encrypt(
        p_input_string in varchar2,
        p_key_string in varchar2)
return varchar2
is
        l_encrypted_value varchar2(512);
        l_input_string varchar2(512);
        l_key_string varchar2(512);
begin        l_input_string:=rpad(p_input_string,trunc(length(p_input_string)/8+1)*8,chr(0));       
        l_key_string:=rpad(p_key_string,16,chr(0));        
        l_encrypted_value:=dbms_obfuscation_toolkit.des3encrypt(
                                                input_string=>l_input_string,
                                                key_string=>l_key_string);
        return l_encrypted_value;
end;
加密已经没有问题了,但是解密出现了一些问题!!! 
1、使用Select   RawToHex(   econf_encrypt(   '1234567890 ',   '123456 '   )   )   From   Dual;得到了加密结果。2、使用Select   econf_decrypt(  'XXXX '   ,   '123456 '   )   From   Dual;获取解密字符串总是出现错误,报告说“ORA-28232:   obfuscation   工具箱的输入长度无效”!但是单独测试econf_decrypt则不发生错误!!! 请各位老大看看那里出了问题!!!

解决方案 »

  1.   

    ORA-28232: invalid input length for obfuscation toolkit 
    Cause: Length of data submitted for encryption or decryption is not a multiple of 8 bytes.
    Action: Make sure that the length of the data to be encrypted or decrypted is a multiple of 8 bytes.
    是不是你的解密的串没拷贝完全,貌似要求长度是8byte的整数倍
      

  2.   

    select econf_encrypt('147258','econference') from dual;
    ERROR:
    ORA-29275: partial multibyte character我执行上面的函数的时候,报上面的错误,请问是怎么回事?哪位帮忙看看?
      

  3.   

    你的函数是没问题地,问题在于你解密的时候拷贝的串不完全,是不是有不可见字符??
    SQL> Select econf_decrypt( econf_encrypt( '1234567890 ', '123456 ' ) , '123456 ' ) From Dual;
     
    ECONF_DECRYPT(ECONF_ENCRYPT('1
    --------------------------------------------------------------------------------
    1234567890
     
    SQL> 
      

  4.   

    对,你这样是没有问题的,你拷贝下select econf_encrypt('147258','econference') from dual;
    这条语句执行下,就会报ORA-29275: partial multibyte character这个错,不是每个指都会报这个错的,我执行select econf_encrypt('123456','econference') from dual这条语句,是不会报错的,是正常的
      

  5.   

    试试看用下面的代码执行,会报错吗?
    declare
    v_pwd varchar2(1000);
    v_old_pwd varchar2(1000);
    begin
    Select RawToHex( econf_encrypt( '1234567890 ', '123456 ' ) )
    into v_pwd
     From Dual;
    dbms_output.put_line(v_pwd);
    Select econf_decrypt( v_pwd , '123456 ' )
    into v_old_pwd 
     From Dual;
    dbms_output.put_line(v_old_pwd );
    end;