用户注册、登录密码加密(md5)

注册加密

	/**
	 * 处理注册业务
	 * @param username
	 * @param password
	 * @param phone
	 * @param email
	 * @param session
	 * @return
	 */
	@RequestMapping(value="/handle_reg.do",method=RequestMethod.POST)
	@ResponseBody//实质内容
	public ResponseResult<Void> handleReg(String username,
			String password,String phone,String email,
			HttpSession session){
		ResponseResult<Void> rr;
		User user=new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setPhone(phone);
		user.setEmail(email);
		try{
			User u=userService.reg(user);
			session.setAttribute("uid", u.getId());
			session.setAttribute("username", u.getUsername());
			rr=new ResponseResult<Void>(ResponseResult.STATE_OK);
		}catch(UsernameConflictException e){
			rr=new ResponseResult<Void>(e);
		}
		return rr;
	}
	@Transactional//注释事务:一旦抛出RuntimeException异常,事务自动回滚
	public User reg(User user) {
		//根据尝试注册的用户名进行查询,判断用户名是否被占用
		User u=findUserByUsername(user.getUsername());
		if(u!=null){
			//用户名被占用,则:
			throw new UsernameConflictException("用户名"+user.getUsername()+"已经被注册");
		}else{
			//用户名未被占用,则执行注册:
			//把密码加密。
			String salt=UUID.randomUUID().toString();
			String md5Password=getEncrpytedPassword(user.getPassword(), salt);
			user.setPassword(md5Password);
			//保存salt,即盐
			user.setUuid(salt);
			//保存日志信息
			Date now=new Date();
			user.setCreatedUser("System");
			user.setCreatedTime(now);
			user.setModifiedUser("System");
			user.setModifiedTime(now);
			//使用Mybatis处理insert后,数据的id 将会被封装到这个对象中。
			//在执行以下代码之前,user中并没有id,执行结束后MyBatis会将id封装到user参数中。
			//UserMapper.xml参数中需要设置属性useGeneratedKeys="true" keyProperty="id"。
			userMapper.insert(user);
			return user;
		}
	}

登录时对登录密码加密后对比

@RequestMapping(value="/handle_login.do",method=RequestMethod.POST)
	@ResponseBody
	public ResponseResult<Void> handleLogin(String username,String password,HttpSession session){
		ResponseResult<Void> rr;
		try{
			User user=userService.login(username, password);
			session.setAttribute("uid", user.getId());
			session.setAttribute("username", user.getUsername());
			rr=new ResponseResult<Void>(ResponseResult.STATE_OK);
		}catch(ServiceException e){
			rr=new ResponseResult<Void>(e);
		}
		return rr;
	}
public User login(String username, String password) {
		//根据用户名查询用户信息
		User user=findUserByUsername(username);
			//判断是否查询到匹配的用户信息
		if(user==null){
			//没有:抛出异常,用户名不存在UsernameNotExitException
			throw new UserNotExitException("用户名"+username+"不存在");
		}else{//存在:继续
			//获取该用户的盐(UUID)
			String salt=user.getUuid();
			//基于盐,对用户输入的密码进行加密
			String md5Password=getEncrpytedPassword(password, salt);
			//判断加密后的密码与获取的用户信息中的密码是否匹配
			if(md5Password.equals(user.getPassword())){
				//匹配,返回查询到的User对象
				return user;
			}else{
				//不匹配,抛出异常:密码不匹配PasswordNotMatchException
				throw new PasswordNotMatchException("密码不正确");
			}
		}
	}
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nc57登录密码加密类是一种用于对用户登录密码进行加密处理的类。在传统的用户密码存储方式中,用户的密码通常以明文的方式存储在数据库中,这样存在着安全风险,一旦数据库泄漏,用户密码也会暴露,导致用户账号被攻击者恶意使用。 为了增加密码存储的安全性,nc57登录密码加密类通过一系列的加密算法对用户的密码进行加密。首先,用户输入的密码会经过一定的字符串预处理,比如去除空格、转换为小写等。接下来,采用哈希函数对预处理后的密码进行运算,得到一个固定长度的哈希值。哈希值是一种不可逆的加密结果,即不容易通过哈希值反推出原始密码。 在加密过程中,还可以加入“盐”的概念。盐是一个随机生成的字符串,每个用户都有一个不同的盐值。将盐与用户密码哈希值进行混合运算,可以增加密码的复杂度和安全性。 加密后的密码哈希值保存在数据库中,而不是明文密码。当用户登录时,输入的密码经过同样的加密过程,与数据库中保存的哈希值进行比对。如果两者一致,则验证成功,否则验证失败。这种方式可以保护用户的密码安全,即使数据库被攻击也无法获取用户的明文密码。 总结来说,nc57登录密码加密类通过密码预处理、哈希运算和盐值混淆等方式,增加了用户密码存储的安全性,保护用户账号的安全性和隐私。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值