Chinaunix首页 | 论坛 | 博客
  • 博客访问: 757166
  • 博文数量: 160
  • 博客积分: 2516
  • 博客等级: 大尉
  • 技术积分: 1511
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-24 17:58
文章分类

全部博文(160)

文章存档

2019年(2)

2018年(3)

2017年(15)

2016年(3)

2015年(11)

2014年(3)

2013年(1)

2012年(3)

2011年(17)

2010年(25)

2009年(17)

2008年(13)

2007年(14)

2006年(21)

2005年(10)

2004年(2)

分类: Oracle

2007-03-11 13:02:28

Using DES Encryption
The new DBMS_OBFUSCATION_TOOLKIT allows sophisticated encryption but insists that the text to be encrypted be a multiple of 8 bytes. As suggested by an Ask Tom post, a simple wrapper allows any length text to be encrypted whilst still satisfying this requirement.
Function

create or replace function
encrypt_data(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
begin
v_text := rpad( p_text, (trunc(length(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;
/


create or replace function decrypt_data(p_text varchar2,p_key varchar2) return varchar2 is
v_text varchar2(4000);
begin
sys.dbms_obfuscation_toolkit.desdecrypt(
input_string => p_text,
key_string => p_key,
decrypted_string=> v_text);
return rtrim(v_text,chr(0));
end;
/

drop table mjs_test;
CREATE TABLE MJS_TEST
(
OWNER VARCHAR2(30) NOT NULL,
OBJECT_NAME VARCHAR2(90) NOT NULL
)
/

insert into mjs_test values ('1', encrypt_data('PASSWORD1','12345678'));
insert into mjs_test values ('2', encrypt_data('PSW2','87654321'));
insert into mjs_test values ('3', encrypt_data('mjs1','ABCDEFGH'));
select * from mjs_test;
commit;

select owner, decrypt_data(object_name,'12345678') from mjs_test where owner = '1';
select owner, decrypt_data(object_name,'87654321') from mjs_test where owner = '2';
select owner, decrypt_data(object_name,'ABCDEFGH') from mjs_test where owner = '3';

阅读(1620) | 评论(0) | 转发(0) |
0

上一篇:JS 网页技巧

下一篇:two years ago

给主人留下些什么吧!~~