使用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则不发生错误!!! 请各位老大看看那里出了问题!!!
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则不发生错误!!! 请各位老大看看那里出了问题!!!
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的整数倍
ERROR:
ORA-29275: partial multibyte character我执行上面的函数的时候,报上面的错误,请问是怎么回事?哪位帮忙看看?
SQL> Select econf_decrypt( econf_encrypt( '1234567890 ', '123456 ' ) , '123456 ' ) From Dual;
ECONF_DECRYPT(ECONF_ENCRYPT('1
--------------------------------------------------------------------------------
1234567890
SQL>
这条语句执行下,就会报ORA-29275: partial multibyte character这个错,不是每个指都会报这个错的,我执行select econf_encrypt('123456','econference') from dual这条语句,是不会报错的,是正常的
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;