ORACLE应用经验(4)-加密程序

王朝oracle·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

-------------1. 加密程序数据库触发子scjmmm----------------------

REM 对GHXXB制立数据库触发子(当INSERT OR UPDATE GHXXB时触发)

drop trigger scjmmm;

create or replace trigger scjmmm

before insert or update of mm On ghxxb For each Row

Begin

:new.mm:=ENCRYPT(:new.mm,:NEW.GH,TO_CHAR(SYSDATE,'SS'));

End;

/

-------------2. 密码的加密程序ENCRYPT----------------------

Create or Replace

Function ENCRYPT (Inpass In Varchar2,IN_GH In Varchar2,IN_SS In Varchar2)

Return Varchar2 Is

bcs varchar2(20);

bcs1 number;

cs number;

jg number;

m_gh VARCHAR2(4);

m_mm VARCHAR2(20);

Begin

m_gh:=IN_GH;

m_mm:=INPASS;

cs:=TO_NUMBER(IN_SS);

If cs<=1 then cs:=77 ;end if;

bcs:=substr(to_char(ascii(substr(m_gh,1,1))),1,2);

If bcs<'1' then bcs:='7' ;end if;

m_gh:=substr(m_gh,2);

Loop EXIT WHEN nvl(length(m_gh),0)=0 ;

bcs:=bcs||substr(to_char(ascii(substr(m_gh,1,1))),-1,1);

m_gh:=substr(m_gh,2);

End loop;

Loop EXIT WHEN nvl(length(m_mm),0)=0 ;

bcs:=bcs||substr(to_char(ascii(substr(m_mm,1,1))),-1,1);

m_mm:=substr(m_mm,2);

End loop;

bcs1:=to_number(bcs);

jg:=cs*bcs1;

Loop EXIT WHEN length(to_char(jg))>13;

jg:=jg*cs ;

End loop;

RETURN(IN_SS||substr(to_char(jg),1,14));

End;

/

grant execute on ENCRYPT to public;

结束

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航