登录之密码加密

一、密码加密的原因

如果用户输入了密码,后台不做任何处理的话,那么该用户的明文密码就会在网络上进行传输,假如说有恶意的用户把你的密码给截取到了,那么他(她)就会得到你的明文密码。

二、可以对密码进行两次MD5

第一次,对密码进行MD5加密,然后再把MD5加密之后的密码传递给服务端;(防止密码明文传输)

第二次,服务端在接收到客户端传过来的MD5加密密码,并不是直接把它写入到数据库中,而是随机生成一个salt,根用户输入的密码进行一次拼装,然后再做一次MD5,然后把MD5和salt同时写道数据库当中(这样操作更安全)

三、引入MD5工具类,添加MD5Util

1、添加MD5相关依赖

                <dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.6</version>
		</dependency>

2、创建MD5Util类

package demo.utils;

import org.apache.commons.codec.digest.DigestUtils;

public class MD5Util {
	
	public static String md5(String src) {
		return DigestUtils.md5Hex(src);
	}
	
	private static final String salt = "1a2b3c4d";      // 默认的salt值

	//将form表单输入的密码转化为md5加密密码
	public static String inputPassToFormPass(String inputPass) {
		String str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4); // 先变一下
		System.out.println(str);  // 123456----->12123456c3
		return md5(str);  // md5加密
	}

	//将md5加密的密码转化为数据库密码
	public static String formPassToDBPass(String formPass, String salt) {
		String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
		return md5(str);
	}
	
	public static String inputPassToDbPass(String inputPass, String saltDB) {
		String formPass = inputPassToFormPass(inputPass);
		String dbPass = formPassToDBPass(formPass, saltDB);
		return dbPass;
	}
	
	
	
}

3、测试

        public static void main(String[] args) {
//		System.out.println(inputPassToFormPass("123456")); //d3b1294a61a07da9b49b6e22b2cbd7f9
		System.out.println(formPassToDBPass(inputPassToFormPass("123456"), "1a2b3c4d")); //b7797cce01b4b131b433b6acf4add449

	}

分析:明文密码由123456通过一次MD5加密变为了d3b1294a61a07da9b49b6e22b2cbd7f9,d3b1294a61a07da9b49b6e22b2cbd7f9和1a2b3c4d进行拼装又进行了一次MD5加密变为了b7797cce01b4b131b433b6acf4add449,所以最终存入到数据库的是b7797cce01b4b131b433b6acf4add449

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值