« 用Oracle的加密包进行des3算法加密 »
Oracle » http://www.anysql.net/oracle/oracle_des3_encrypt.html 2007-01-31Oracle中的bms_obfuscation_toolkit包定义了几种加密算法, 你可以用这个包来对需要的数据进行加密, 国外有人这样用的, 刚好那个库坏了向我求助, 所以我才知道. 对于这方面我们知道的实在有限.
将两个过程(加密和解密)放在一个包中, 定义如下:
create or replace package mydes3 is
function encrypt (p_input varchar2) return varchar2;
function decrypt (p_input varchar2) return varchar2;
end;
/
DES3算法要求输入的值的长度是8的整数倍, 因此在加密和解密过程中, 字符串后面会多出空格. 如下所示:
ASQL> SELECT mydes3.ENCRYPT('ABCDE') ENC_STR FROM DUAL;
ENC_STR
-------
?oa?[Z?
1 rows returned.
ASQL> SELECT mydes3.DECRYPT(mydes3.ENCRYPT('ABCDE')) enc_str from dual;
ENC_STR
--------
ABCDE
1 rows returned.
ASQL> SELECT LENGTH(mydes3.DECRYPT(mydes3.ENCRYPT('ABCDE'))) STRLEN FROM DUAL;
STRLEN
------
8
1 rows returned.
为了安全起见, 你可以将PL/SQL代码用Wrap来加密. 下面附上Package Body部份代码:
create or replace package body mydes3 is
gk1 varchar2 (1000) := 'This is my DES3 key, make it longer!!';
function encrypt (p_input varchar2) return varchar2 is
l_input varchar2 (1000);
l_key varchar2 (100) := gk1;
l_result varchar2 (1000);
begin
if p_input is null then
return null;
else
-- pad to multiple of 8 chars;
l_input := rpad (p_input, (trunc(length(p_input)/8)+1)*8, ' ');
dbms_obfuscation_toolkit.des3encrypt (
input_string => l_input,
key_string => l_key,
encrypted_string => l_result,
which => 1);
return l_result;
end if;
end encrypt;
function decrypt (p_input varchar2) return varchar2 is
l_input varchar2 (1000);
l_key varchar2 (100) := gk1;
l_result varchar2 (1000);
begin
if p_input is null then
return null;
else
l_input := p_input;
dbms_obfuscation_toolkit.des3decrypt (
input_string => l_input,
key_string => l_key,
decrypted_string => l_result,
which => 1);
return l_result;
end if;
end decrypt ;
end mydes3;
/


DES3是什么时候的算法?以前在学校的时候分析过DES算法,64位加密的(好像是56位密钥加8位的校验),不是很安全,用差分分析和线性分析都比较容易解密。现在应该被AES替代了吧,当时我们的作业就是做其中一个候选算法的加密程序。我看10G的RMAN有AES128加密这一项。
最好对KEY也进行一次加密
这样即使拥有查询的KEY也无法对数据进行解密
查询KEY===》加密KEY===》解密数据
We succeed only as we identify in life, or in war, or in anything else, a single overriding objective, and make all other considerations bend to that one objective.