• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用MD5编码实现数据库用户密码字段的加密

mysql 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

1 前言 众所周知,MD5是目前应用最多的密码保护方法,该编码传说为不可逆加密编码<也就是说,永运无法倒算原码>。 使用MD5加密用户的操作密码,可以有效防止系统维护人员直接进入数据库时出现系统安全漏洞<直接使用SELECT语句查询,将用户密码字段只能看

  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贴子中获得>

<style> .CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;} .CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;} .CodeEntity .code_pieces ul.piece_anchor li{border-lef本文来源gaodaima#com搞(代@码$网6t:3px #40AA63 solid;border-right:3px #efe solid;} .CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;} .CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;} .CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;} .CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;} .CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;} .CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;} .CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;} </style> <!—ecms -ecms

    –> <!—ecms -ecms

  • $velocityCount
  • –> <!—ecms -ecms

–>

  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的目的,是为了调试方便,同时多提供一个知识点。 

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用MD5编码实现数据库用户密码字段的加密
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址