当前位置--> 首 页 --> 文 章 -->Oracle

※阅读文章※

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


作者:不祥 [文章出自: www.fanqiang.com]

                            
-------------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;



文章加入时间: 2004-11-17 14:42:52 责任编辑: w9   (2495 人次查阅)
 
Copyright © 1998-2004 中国PHP联盟 All rights reserved.