用户注册进行密码加密MD5

工具类util

package com.cbb.util;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Component;

import java.math.BigInteger;
import java.security.MessageDigest;

/**
 * Description: md5加密解密
 */
@Component
public class Md5Util {

    public String md5(String pwd) throws Exception {
        byte[] digest = MessageDigest.getInstance("md5").digest(pwd.getBytes("utf-8"));
        String md5code = new BigInteger(1, digest).toString(16);
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

    // ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
    // (1)0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),
    // 如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字
    // 符:SOH(文头)、EOT(文尾)、ACK(确认)等;
    // ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的 应用程序,而对文本显示有不同的影响。
    // 2)32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
    // (3)65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    public  String md5PlusSalt(String keyword) {
        // md5加密
        String md5 = DigestUtils.md5Hex(keyword);
        // md5+盐
        char[] cArray = md5.toCharArray();
        for (int i = 0; i < cArray.length; i++) {
            if (cArray[i] >= 48 && cArray[i] <= 57) {
                cArray[i] = (char) (105 - cArray[i]);

            }
        }
        // 都可以使用
        return String.valueOf(cArray);
        // return "".valueOf(cArray);

    }

    // 解密+盐
    public  String md5MinusSalt(String md5) {
        char[] cArray = md5.toCharArray();
        for (int i = 0; i < cArray.length; i++) {
            if (cArray[i] >= 48 && cArray[i] <= 57) {
                cArray[i] = (char) (105 - cArray[i]);
            }
        }
        return String.valueOf(cArray);
        // return "".valueOf(cArray);
    }
}
业务层 Imple

package com.cbb.serviceimple;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cbb.entity.Login;
import com.cbb.mapper.LoginMapper;
import com.cbb.service.LoginService;
import com.cbb.util.Md5Util;

import lombok.RequiredArgsConstructor;

/**
 * 这是一个关于用户登录信息业务处理的实现类,处理业务逻
 * 
 * @author 陈斌斌
 * @Date 2022年5月11日 09点25分
 *
 */
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class LoginServiceImple implements LoginService {

/**
     * 用户登录的接口
     */
    private final LoginMapper loginMapper;
    /**
     * 用于请求
     */
    private final HttpServletRequest request;
    /**
     * 用户登录密码进行加密
     */
    private final Md5Util md5Util;
    /**
     * session里面有存储的会话
     */
    private HttpSession session;

    /**
     * 查询用户是否存在,并且账号与密码是否正确
     * 
     * @param login
     * @return
     */
    @Override
    public Map<String, Object> selLoginName(Login login) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        UpdateWrapper<Login> updateWrapper = new UpdateWrapper<Login>();
        QueryWrapper<Login> queryWrapper = new QueryWrapper<Login>();
        if (login.getUserName() != null && !"".equals(login.getUserName())) {
            queryWrapper.eq("userName", login.getUserName());
        }
        Login logins = loginMapper.selectOne(queryWrapper);
        Map<String, Object> map = new HashMap<String, Object>();
        if (logins != null) {

            boolean isTrue = (login.getUserName() != null && !"".equals(login.getUserName()))
                    && (login.getPassword() != null && !"".equals(login.getPassword()));
            if (isTrue) {
                // 密码进行加盐
                String pwd = md5Util.md5PlusSalt(login.getPassword());
                // 加盐后进行解密
                String beginPwd = md5Util.md5MinusSalt(pwd);
                boolean isTruePwd = login.getUserName().equals(logins.getUserName())
                        && beginPwd.equals(logins.getPassword());
                if (isTruePwd) {
                    map.put("code", "200");
                    map.put("message", "登录成功");
                    map.put("data", login);
                    if (logins.getIsLock() < 1) {
                        updateWrapper.set("islock", 0);
                        updateWrapper.set("number", 0);
                        updateWrapper.set("updatetime", sdf.format(new Date()));
                        updateWrapper.eq("username", logins.getUserName());
                        loginMapper.update(null, updateWrapper);
                        session = request.getSession();
                        session.setAttribute("uname", login);
                        // 30分钟内不操作系统页面需要重新登录
                        session.setMaxInactiveInterval(1800);
                    } else {
                        map.put("code", "500");
                        map.put("message", "密码被锁定,请联系管理员进行解锁");
                    }

                } else {
                    if (logins.getNumber() > 4) {
                        login.setNumber(logins.getNumber() + 1);
                        updateWrapper.set("updatetime", sdf.format(new Date()));
                        updateWrapper.set("number", login.getNumber());
                        updateWrapper.set("islock", 1);
                        updateWrapper.eq("username", logins.getUserName());
                        loginMapper.update(null, updateWrapper);
                        map.put("code", "500");
                        map.put("message", "密码被锁定,请联系管理员进行解锁");
                    } else {
                        login.setNumber(logins.getNumber() + 1);
                        updateWrapper.set("updatetime", sdf.format(new Date()));
                        updateWrapper.set("number", login.getNumber());
                        updateWrapper.set("islock", 0);
                        updateWrapper.eq("username", logins.getUserName());
                        loginMapper.update(null, updateWrapper);
                        map.put("code", "500");
                        map.put("message", "账户或密码错误,请重新输入");
                        map.put("data", login.getNumber() - 1);
                    }

                }
            } else {
                map.put("code", "500");
                map.put("message", "用户或者密码不能为空");
            }

        } else {
            map.put("code", "500");
            map.put("message", "用户不存在");
        }
        return map;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值