工具类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;
    }

}

用户注册进行密码加密MD5相关推荐

  1. php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888

    一 : 常用密码加密md5值,123456,admin,admin888 123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59a ...

  2. 常用密码加密md5值,123456,admin,admin888

    123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59abbe56e057f20f883e admin这个经md5算法加密之后是多 ...

  3. 密码加密(MD5)原则

    用户在使用软件时所提交的密码,不应该被记录下来,如果将用户的密码记录,这是不安全的做法! 当用户提交注册信息时,密码必须被记录下来,为了保障密码安全,必须对用户提交的原始密码进行加密处理! 用户提交的 ...

  4. Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)

    一.创建项目 二.目录结构 三.配置常用中间件 3.1 解析请求体 express.json() express.urlencoded() 3.2 日志输出 morgan() 3.3 为客户端提供跨域 ...

  5. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

  6. BCrypt密码加密

    任何应用考虑到安全,绝不能明文的方式保存密码.密码应该通过哈希算法进行加密.有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择. Spring Security 提供了BCryp ...

  7. shiro 使用md5密码加密 锁定账户

    此篇博客根据之前写的shiro快速配置延续的,建议不了解的可以先看看之前的博客. springMVC中快速配置shiro 1.为了使用密码加密,我们新建一个对用户信息操作的工具类 package co ...

  8. 用户注册密码加密和后端校验的权衡

    背景 对于一个系统来说,显然把用户的密码明文存储是大忌,那么必然要加盐加密存储. 在登录注册过程中,密码显然不能明文传输,那么必然会用https来做登录注册接口. 但是 https 并不是绝对安全的, ...

  9. Java——MD5密码加密

    目录 1.MD5概述 1.1.什么是MD5? 1.2.MD5加密作用 1.3.什么要使用MD5加密? 2.MD5加密流程 2.1.工具类导入 2.2.用户注册模块使用MD5 2.3.登录问题解决 1. ...

最新文章

  1. java adt怎么打开项目,如何在Eclipse中打开Android Studio项目?
  2. Wireshark分析器分析数据流过程
  3. jQuery基础(未完待续)
  4. 装机 win7 64 IE11
  5. 基于HTML5的网络拓扑图 - 设备状态面板
  6. java https请求 证书_java发https请求,证书配置
  7. kaggle:Costa Rican Household Poverty Level Prediction(1)DEA
  8. java周报简单模板_快速成长从写一份走心的周报开始
  9. Linux测网速工具,Linux中上下行网速测试工具 speedtest-cli
  10. Yandex安装第三方crx插件的方法
  11. 使用DisUnity解包unity资源文件
  12. Linux下gzip、bzip、zip、tar压缩命令的使用详解
  13. 用户需求不等于产品需求
  14. 《C语言入门经典》Ivor Horton第10章习题2
  15. android 瀑布流 的实现
  16. Error: unable to perform an operation on node ‘rabbit@rabbitma‘ please see diamostics infoxmation
  17. html背景颜色图片,HTML背景颜色和背景图片
  18. Parameter... parameter
  19. tof摄像头手势识别_揭秘国内独家TOF深度摄像头,助力机器人避障与室内导航
  20. 程序员35岁前成功的12条黄金法则

热门文章

  1. 笔记本CPU性能天梯图
  2. Importerror: libgl.so.1: cannot open shared object file: no such file or directory
  3. NBA球星库里入股FTX并担任品牌大使,后者此前已签下布雷迪
  4. 使用C++,用四阶Runge-Kutta的方法来求解一阶常微分方程
  5. mini6410移植全攻略(3)--uboot移植之支持nand flansh启动(上)
  6. 四川麻将必胜攻略笔记(入门篇1)
  7. JSP页面禁用EL表达式的原因和实现方法
  8. 0805,0603,1206这些封装名字的由来
  9. 21.VIVO: Visual Vocabulary Pre-Training for Novel Object Captioning
  10. 原生Hadoop环境下安装Hue