[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > Oracle > 正文
ORACLE應用經驗(4)-加密程序
本文出自: 作者: (2001-08-13 10:00:00)
                            
-------------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;


(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
ORACLE應用經驗(5)-表空間 (2001-08-13 12:00:00)
ORACLE應用經驗(4)-加密程序 (2001-08-13 10:00:00)
ORACLE應用經驗(3)-DBMS_SQL封裝過程 (2001-08-13 09:00:01)
ORACLE應用經驗(2) (2001-08-13 08:00:00)
ORACLE應用經驗(1) (2001-08-13 07:00:00)
 

★  樊強制作 歡迎分享  ★