国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

使用MD5編碼實現數據庫用戶密碼字段的加密

2024-07-21 02:37:57
字體:
來源:轉載
供稿:網友

  1 前言 
  眾所周知,md5是目前應用最多的密碼保護方法,該編碼傳說為不可逆加密編碼<也就是說,永運無法倒算原碼>。 使用MD5加密用戶的操作密碼,可以有效防止系統維護人員直接進入數據庫時出現系統安全漏洞<直接使用SELECT語句查詢,將用戶密碼字段只能看到亂碼,或者"****">
  本文針對密碼字段加密,作一實例,希望能給大家系統建設過程帶來幫助。
  
  2 技術點
  2.1 DBMS_OBFUSCATION_TOOLKIT.MD5
  DBMS_OBFUSCATION_TOOLKIT.MD5是MD5編碼的數據包函數,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual時,卻有錯誤提示,看來該函數只能直接在程序包中調用,不能直接應用于SELECT語句。
  
  2.2 Utl_Raw.Cast_To_Raw
  DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW類型,要正確顯示,需要經過Utl_Raw.Cast_To_Raw轉換<該知識點則之前論壇中NICK511貼子中獲得>
   
  3 實例演練 
  3.1 測試環境 
  使用Scott/Tiger@YourDBName
  
  --3.2.1 創建數據表
  Drop Table Test_User;
  CREATE TABLE Test_User (
    UserName VARCHAR2(30) NOT NULL,
   PassWord VARCHAR2(2000) NOT NULL
  )
  /
  
  --3.2.2 創建程序包
  Create Or Replace Package Test_MD5 AS
    Function FN_GetMD5(P_Str In VarChar2)
     Return VarChar2;
    Function FN_CheckUser
     (P_UserName In VarChar2
       ,P_Password In VarChar2)
     Return Number;
  End;
  /
  CREATE OR REPLACE PACKAGE BODY Test_MD5 AS 
  
   FUNCTION FN_GetMD5 (P_Str IN VARCHAR2) 
    RETURN VARCHAR2 AS 
   BEGIN 
    RETURN DBMS_OBFUSCATION_TOOLKIT.MD5( 
     input_string => Upper(P_Str)); 
   END; 
   Function FN_CheckUser 
     (P_UserName IN VARCHAR2 
      ,P_Password IN VARCHAR2) 
    Return Number 
   Is 
     L_Password VarChar2(2000); 
   BEGIN 
    SELECT 
       Utl_Raw.Cast_To_Raw(Password) 
    INTO 
       L_Password 
    FROM  
       Test_User 
    WHERE  
       Upper(UserName) = UPPER(P_UserName); 
     If Utl_Raw.Cast_To_Raw(FN_GetMD5(P_Password))=L_Password Then 
      Return 1; 
     Else 
       Return 0; 
     End If; 
   EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     Return 0; 
   END; 
  End; 
  / 
  --3.3 測試
  Delete Test_User;
  Insert Into Test_User Values('A',Test_MD5.FN_GetMD5('aa'));
  Insert Into Test_User Values('B',Test_MD5.FN_GetMD5('bb'));
  Commit;
  Select Test_MD5.FN_CheckUser('a','aa') From Dual;
  Select Test_MD5.FN_CheckUser('a','bb') From Dual;
  
  注:對MD5編碼的比較,可以不需要經過Utl_Raw.Cast_To_Raw轉換。此處使用Utl_Raw.Cast_To_Raw的目的,是為了調試方便,同時多提供一個知識點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 察隅县| 道真| 桐庐县| 柏乡县| 文昌市| 巴里| 蒙阴县| 乐都县| 民丰县| 常州市| 永仁县| 河北区| 临沭县| 游戏| 开原市| 临海市| 图片| 阳信县| 肃北| 二手房| 宜宾市| 桐城市| 永福县| 邵武市| 新化县| 塘沽区| 百色市| 柏乡县| 乌拉特前旗| 卓尼县| 通化市| 咸丰县| 海南省| 汕头市| 克山县| 青海省| 永善县| 宜阳县| 成武县| 石城县| 舞阳县|