0%

Oracle数据库用户密码MD5加密

有时候我们会把系统用户的用户名和密码存在在数据库的表中,如果密码以明文方式存储会存在一定的风险性,所以就想着如何能够通过一种加密方式对用户的密码进行加密,保障用户信息的安全性。

下面是本人推荐的一种主流密码加密算法,MD5(Message Digest Algorithm),中文名为消息摘要算法,它是计算机广泛使用的哈希算法之一,能够将数据(如汉字)运算为另一固定长度的值。

MD5算法具有以下的特点:

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  • 容易计算:从原数据计算出MD5值很容易。
  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
    既然我们有这么强大的算法,那么怎么样把它应用到我们Oralce数据库当中去呢?

Step1

新建一个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION MD5(

passwd IN VARCHAR2)

RETURN VARCHAR2

IS

retval varchar2(32);

BEGIN

retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ;

RETURN LOWER(retval);--大小写转换

END;

Step2

调用该函数对password进行加密:

1
select md5('123&%¥#;,.') from dual;

执行上面查询语句就对我们的密码进行了加密,然后生成了32位的加密密文,经本人测试,如果是简单的123类型的数字,也是很容易在网上的MD5在线解密工具破解的;如果是复杂的密文加密出来的密文是没那么容易被破解的;所以以后设置密码一定要注意不要太简单了,不然再高深的加密算法也是能够被破解获知的。