最近接触网络安全方面的知识,把好的整理下:

登录Web系统时通常都采用用户名和密码的形式,如果这样的数据以明码的方式放在数据库中的话无疑会给别有用心的人以可趁之机,所以采取一定的防范措施是必要的。

现在比较安全的方式是用MD5进行加密,利用Apache commons的DigestUtils工具类我们可以迅速做到这一点。
要得到Apache commons的DigestUtils工具类,你必须加载commons-codec-1.x.jar包,我使用的是commons-codec-1.3.jar。使用的具体类是:org.apache.commons.codec.digest.DigestUtils.

下面,我们的任务是,当用户注册时,将他注册的密码加密后存入数据库,下面请见具体代码:

 1  //  对密码进行加密,加密后再通过Hibernate往数据库里存
 2          String changedPswd = DigestUtils.md5Hex(pswd);
 3          
 4          User user = new  User(name,changedPswd,email,brief);
 5          
 6           if (service.hasSameName(name)){
 7               //  同名检测
 8              request.setAttribute( " msg " ,  " 已经有和' " + name + " '同名的用户存在了,请换个名称注册. " );
 9               return   new  ActionForward( " /web/page/register.jsp " );
10          }
11          
12           if (service.hasSameEmail(email)){
13               //  同Emial检测
14              request.setAttribute( " msg " ,  " 已经有和' " + email + " '相同的用户存在了,请换个Email注册. " );
15               return   new  ActionForward( " /web/page/register.jsp " );
16          }
17          
18           try {
19              service.create(user);
20              saveUserRegisterInforToLog(user,request);
21              request.setAttribute( " msg " ,  "" + name + " ,欢迎您的加盟.Ȼ������¼��ť " );
22               return   new  ActionForward( " /web/page/login.jsp " );
23          }
24           catch (Exception ex){
25              String str = " 创建用户时遇到未预计的异常,具体的异常信息为' " + ex.getMessage() + " ',请与系统维护人员联系. " ;
26              request.setAttribute( " msg " ,str );
27              logger.fatal(str);
28               return   new  ActionForward( " /web/page/register.jsp " );
29          }

以上第二行代码是进行MD5加密的处理,如果用户输入的密码是123456789,则会得到25f9e794323b453885f5181f1b624d0b这样的字符串。

注册用户后,数据库中您将看到如下的对应记录,看到这样的文字,要去反猜原始密码是非常困难的,当然您有山东大学王小云教授的本事则不费吹灰之力。

下面,我们还要对登录时做一番处理,因为登录时用的是原始密码,我们应该对它进行加密后再和数据库中的对应字段进行比对,代码如下:

            User user = objs.get( 0 );
            
             //  得到MD5加密后的密码
            String changedPswd = DigestUtils.md5Hex(password);
                
             //  再与数据库中用户密码进行比对
             if (user.getPassword().equals(changedPswd) == false ){
                 throw   new  ErrorPswdException( " 密码不匹配. " );
            } else {
                 return  user;

}

以上代码中,password是用户在页面输入的原始密码,changedPswd是经过MD5加密后的密码,user是按名称查询出来的用户,他的密码部分就是已经经过MD5加密的,我们拿这两个密码进行比对即可。

之所以没有反向还原是因为MD5加密和Base64不一样,前者是不可逆的,后者则可以还原。当然,Base64不是严格意义上的加密手段。

最后的问题,如果数据库中原有数据未经加密怎么办,好在MySql数据库提供了md5函数帮我们做到这一点,使用update projectmanager_user set pswd= md5( pswd )  这样的语句就可以将原来数据库中的密码部分用MD5加密了。

下面的图片演示了这一过程:

原始数据:

使用update projectmanager_user set pswd=md5(pswd)加密后的数据库记录:

MD5应用于数据库中密码加密相关推荐

  1. 网站数据库中“密码加密”方法思考

    博主,开始时候,写的web应用,数据库中的密码,都是直接保存的.真正的原汁原味,真正的所见即所得. 后来,看了别人的web应用都是MD5加密的,感觉很不错,自己也在应用中加入了MD5加密,貌似&quo ...

  2. 什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [什么叫MD5, ...

  3. maven 打包数据库加密_SpringBoot项目application.yml文件数据库配置密码加密的方法...

    在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了 ...

  4. jasypt对yml文件中密码加密

    使用jasypt对yml文件中密码加密 需要:maven注解,测试类(根据秘钥生成jasypt加密码) 流程:将注解加入之后,去测试类,自定义秘钥,然后将要加密的账号密码放进去,生成的内容拿出来放到配 ...

  5. mysql数据库表添加加密密码_数据库账号密码加密详解及实例

    数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为sp ...

  6. Python中密码加密存储

    Python中密码加密存储(Django.Flask等) # 导入密码加密模块 import hashlib # 1.创建一个hash对象 h = hashlib.sha256() # 2.填充要加密 ...

  7. BCrypt加密怎么存入数据库_Spring Boot 中密码加密的两种姿势

    1.为什么要加密 2.加密方案 3.实践3.1 codec 加密3.2 BCryptPasswordEncoder 加密 4.源码浅析 先说一句:密码是无法解密的.大家也不要再问松哥微人事项目中的密码 ...

  8. 对数据库的密码加密:md5和bcryptjs

    文章问题导向 如何对密码进行加密?哪种方式更加安全? 如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案 密码加密 一般开发中,是不会有人直接将密码明文直接放到数据库当中的.因为这种做 ...

  9. oracle中md5算法,oracle数据库中存储过程使用MD5算法加密

    一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...

最新文章

  1. idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
  2. webserver之定时器
  3. Spring Boot 特性
  4. day048 BOM和DOM
  5. (转)MongoDB入门分享-笔记整理精选
  6. Sql Server快速入门
  7. 国内最新语音服务器,语音聊天社交很热门,带你搭建自己的语音聊天服务器
  8. ECNU 梵高先生 3529 JAVA
  9. 海海软件发布动态网站加密(DRM版权保护)Beta版
  10. keras使用load_weights遇到报错
  11. select、poll、epoll之间的区别总结摘自http://www.cnblogs.com/Anker/p/3265058.html
  12. 8.4|Crypto Tech Night 第十六期:深入探索DeFi的“代码世界”
  13. java星星随机下落_随机产生星星,单击星星消失
  14. Pytorch Note40 词嵌入(word embedding)
  15. MoveIt!入门教程-简介
  16. linux 手机root原理,手机root原理
  17. wav音频文件格式解析
  18. CF1151F Sonya and Informatics
  19. (Android7.0)Android获取PID、TID、UID
  20. 简单的C语言宏定义结合全局变量的方法实现单片机串口实现透传模式

热门文章

  1. 中国劳动力动态调查数据(CLDS)
  2. android 开发中不可不知的技巧
  3. 初探OroCRM和捆绑扩展
  4. java中bo和vo区别_Java中PO、BO、DTO、VO、DAO等概念的认知和区分
  5. 【水滴石穿】RNNewsGo
  6. Raptor-水仙花数
  7. git pull --rebase PK git pull
  8. 计算机怎么改鼠标标志,电脑鼠标图标怎么改
  9. 【重温基础算法】内部排序之快速排序法
  10. Vitamio和ExoPlayer哪个更好