如何对用户密码进行加密(MD5实现)

  这里并不是真正意义上的加密,只是通过DM5的算法对用户提供的密码进行一次处理(想看密码学的这里可以打住了),从而得到一个复杂的字符串,因为这个字符串不能通过反向解密来获得我们的原始密码,所以这个加密我们初级程序员眼中已经可以算是相当安全了,这里也是对这个简单的加密进行一个使用的介绍,但是这个算法肯定存在不少漏洞,如果是什么大型项目我相信是不可能用这么简单的算法来保证用户安全的,但是就小程序来进行用户校验的话,应该足够了,废话不多说,我们先看一下MD5处理后的东西。

                  

     如图可见:用户zz的密码是一个经过md5进行处理的字符串,而用户zq的密码是一个明码,而且相当简单,破解难度无限趋近于0,那么我们是怎么对数据库内的密码进行加密的呢?

  这里假设大家都理解基本的jdbc的原理知识,即我们程序的流程是   DB→DAO→Service→Controller→Servlet→前端WEB ,我们加密的地方,一般就可以在Service层进行处理。

  既然解决了程序代码层的问题,我们面临的就是实现具体的业务代码了,这里简单举一个注册的例子,我们在程序运行的时候肯定自己是不太了解md5加密的具体算法的,所以需要找一个相对安全好用的工具jar包来帮助我们完成md5的生成,这里我也没有什么好的推荐,一般我就用apache官网下的开源项目:Apache Commons Codec,相信如果你读到这里那么去找到相应的jar包也是很简单。

  我们加载了jar包可以在官网看一下相应的API,发现里面并不复杂,这里简单介绍一下比较常用的一个工具类,是Package org.apache.commons.codec.digest包下的DigestUtils类,点进去有很多方法,包括md2,md3,还有些其他各种各样的算法,这里我们只看md5.(代码很简单,如下)

//xxx方法,不关心

User user = userService.regist(userName, DigestUtils.md5Hex(password+userName));

//xxx方法,不关心

  可以从代码看到,注册方法传入了两个参数,一个是用户名,一个是密码,密码加密采用了【密码】+【用户名】组合的方式再进行md5处理,返回一个十六进制字符串

  DigestUtils.md5Hex(password+userName)

,这里加上用户名目的是可以进一步强化我们的密码安全性,当然,你不可以把自己的加密方式告诉别人,如果被拆包那确实很容易破解。我们也可以【密码】+【用户名】+【用户ID】+【用户住址】等一连串信息进行md5处理,可以有效的防止简单的跑字典包或者彩虹表(彩虹表可以自己谷歌)来破解我们的密码库。如上所述,这样就完成加密啦 :D,是不是很简单。如果登陆的时候记得也要把用户的密码md5处理啊,不然会和数据库的密码字符串对不上的。

  md5加密确实没什么难点,就是有点容易忘记,这里做个记录也当是作为自己的备忘,如果有多余精力去学点深奥的密码学原理那也是再厉害不过啦23333。

如果本文对你或多或少有点帮助,欢迎点赞。

 

posted @ 2017-12-14 20:44  robotman  阅读(806)  评论(0编辑  收藏  举报
ヾ(≧O≦)〃嗷~