Java——MD5密码加密

Java——MD5密码加密Java——MD5密码加密(注册登录案例)

目录

1、MD5概述 

1.1、什么是MD5?

1.2、MD5加密作用

1.3、什么要使用MD5加密?

2、MD5加密流程

2.1、工具类导入

2.2、用户注册模块使用MD5

2.3、登录问题解决


1、MD5概述 

1.1、什么是MD5?

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

1.2、MD5加密作用

是让大容量信息在用数字签名软件签署私人密匙前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。它需要获得一个随机长度的信息并产生一个128位的信息摘要。 

1.3、什么要使用MD5加密?

存储一些敏感信息的时候,如果不进行加密肯能会出现安全问题。例如:系统登录的密码,如果数据库中的密码采用明文,一旦数据库泄露,则用户的密码直接泄露。但是使用MD5加密算法之后即使数据泄露,也不会被轻易的激活成功教程,相对安全。

2、MD5加密流程

2.1、工具类导入

首先需要在项目中导入MD5的工具类,在用户注册模块中进行使用。

public class MD5Utils {

	public static String getPWD( String strs ){
		/*
		 * 加密需要使用JDK中提供的类
		 */
		StringBuffer sb = new StringBuffer();
		try{
			MessageDigest digest = MessageDigest.getInstance("MD5");

			byte[] bs = digest.digest(strs.getBytes());

			/*
			 *  加密后的数据是-128 到 127 之间的数字,这个数字也不安全。
			 *   取出每个数组的某些二进制位进行某些运算,得到一个具体的加密结果
			 *
			 *   0000 0011 0000 0100 0010 0000 0110 0001
			 *  &0000 0000 0000 0000 0000 0000 1111 1111
			 *  ---------------------------------------------
			 *   0000 0000 0000 0000 0000 0000 0110 0001
			 *   把取出的数据转成十六进制数
			 */

			for (byte b : bs) {
				int x = b & 255;
				String s = Integer.toHexString(x);
				if( x > 0 && x < 16 ){
					sb.append("0");
					sb.append(s);
				}else{
					sb.append(s);
				}
			}

		}catch( Exception e){
			System.out.println("加密失败");
		}
		return sb.toString();
	}

}

2.2、用户注册模块使用MD5

下面代码是servlet层注册的部分代码,可以看到在使用BeanUtils工具类自动封装后,从前端获取的数据就会被封装到User对象中,此时获取的密码肯定是用户输入的,那么我们在把user对象传递给dao层进行插入之前进行加密,这样就可以实现密码到数据库中时就可以进行MD5加密了

修改代码前 

            User user=new User();
            Map<String, String[]> map = request.getParameterMap();
            try {
                BeanUtils.populate(user,map);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            boolean register = userService.register(user);
            if(register){
                //注册成功,重定向到成功页面
                response.sendRedirect("register_success.html");
            }else{
                //返回为false说明用户已存在了
                request.setAttribute("register_msg","用户已存在,不能重复注册!");
                //转发到注册页面
                request.getRequestDispatcher("register.jsp").forward(request,response);

            }

在调用service层方法之前加入下面代码,重新为user对象的密码赋值为加密后的密码

user.setPassword(MD5Utils.getPWD(user.getPassword()));

修改代码后 

            User user=new User();
            Map<String, String[]> map = request.getParameterMap();
            try {
                BeanUtils.populate(user,map);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            user.setPassword(MD5Utils.getPWD(user.getPassword()));
            boolean register = userService.register(user);
            if(register){
                //注册成功,重定向到成功页面
                response.sendRedirect("register_success.html");
            }else{
                //返回为false说明用户已存在了
                request.setAttribute("register_msg","用户已存在,不能重复注册!");
                //转发到注册页面
                request.getRequestDispatcher("register.jsp").forward(request,response);

            }

我在注册页面加入一个新的用户admin 

Java——MD5密码加密

可以对比看出,密码就会被加密了,不会以明文的形式展现出来,这样就可以提高数据库信息的安全性。

2.3、登录问题解决

虽然注册功能能够实现加密密码,但是登录功能却会出现问题,因为登录时候需要查询用户名和密码,然而数据库中密码已经被加密了,用户输入的密码肯定不会和加密的密码一致,所以就会出现登录失败的现象。

Java——MD5密码加密

这是我登录servlet的部分代码,我们只需要在service调用方法之前同样加入一个密码加密就可以了,因为这里的密码也是从前端页面获取的,在进行查询用户账号和密码之前对密码进行加密,结果是一致的。 

修改之前

        UserService userService = new UserServiceImpl();
        HttpSession session = request.getSession();
        Map<String, String[]> map = request.getParameterMap();
            User user = new User();
            try {
                BeanUtils.populate(user, map);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            User user1 = userService.login(user);
            if (user1!=null) {
                //登录成功,重定向到QueryAllServlet中
                session.setAttribute("user",user1);
                //转发到查询所有
                // response.sendRedirect("QueryAllServlet");
                //转发到分页查询
                response.sendRedirect("QueryStudentByPageServlet");
            } else {
                session.setAttribute("msg", "登录失败,用户名或密码错误");
                request.getRequestDispatcher("login.jsp").forward(request,response);
            }

修改之后

            UserService userService = new UserServiceImpl();
            HttpSession session = request.getSession();
            Map<String, String[]> map = request.getParameterMap();
            User user = new User();
            try {
                BeanUtils.populate(user, map);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            user.setPassword(MD5Utils.getPWD(user.getPassword()));
            User user1 = userService.login(user);
            if (user1!=null) {
                //登录成功,重定向到QueryAllServlet中
                session.setAttribute("user",user1);
                //转发到查询所有
                // response.sendRedirect("QueryAllServlet");
                //转发到分页查询
                response.sendRedirect("QueryStudentByPageServlet");
            } else {
                session.setAttribute("msg", "登录失败,用户名或密码错误");
                request.getRequestDispatcher("login.jsp").forward(request,response);
            }

登录成功! 

Java——MD5密码加密

今天的文章Java——MD5密码加密分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23873.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注