ORACLE 10G数据库,对数据库中某表的地址(varchar2 1024)与电话(varchar2 64)进行加密,用的加密函数如下:
create or replace function encrypt_data(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
begin
if p_text is null then
return null;
else
v_text := rpad(p_text, (trunc(lengthb(p_text)/8)+1)*8, chr(0));
sys.dbms_obfuscation_toolkit.desencrypt(
input_string => v_text,
key_string => p_key,
encrypted_string=>v_enc);
return v_enc;
end if;
end;
/
create or replace function decrypt_data(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
begin
if p_text is null then
return null;
else
sys.dbms_obfuscation_toolkit.desdecrypt(
input_string => p_text,
key_string => p_key,
decrypted_string=> v_text);
return rtrim(v_text,chr(0));
end if;
end;
/
正常加密后,解密是可以用的。但在把数据库导出,并且在另一台数据库10G服务器导入后,绝大多数数据不能解密。报:
ORA-28232: obfuscation 工具箱的输入长度无效
ORA-06512: 在 "SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 40
ORA-06512: 在 "SYS.DBMS_OBFUSCATION_TOOLKIT", line 153
ORA-06512: 在 "WEBSITE.DECRYPT_DATA", line 7
偶尔有一两个字可以解密。
查看了数据库表中的数据,能够解析的,转换后的值相同,如,
原始数据:
747233 北京市朝阳区光华路7号汉威大厦B802 65612776
加密后的,导出再导入后都为下面值:
747233 g踣