用户注册进行密码加密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;
}
}
用户注册进行密码加密MD5相关推荐
- php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888
一 : 常用密码加密md5值,123456,admin,admin888 123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59a ...
- 常用密码加密md5值,123456,admin,admin888
123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59abbe56e057f20f883e admin这个经md5算法加密之后是多 ...
- 密码加密(MD5)原则
用户在使用软件时所提交的密码,不应该被记录下来,如果将用户的密码记录,这是不安全的做法! 当用户提交注册信息时,密码必须被记录下来,为了保障密码安全,必须对用户提交的原始密码进行加密处理! 用户提交的 ...
- Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)
一.创建项目 二.目录结构 三.配置常用中间件 3.1 解析请求体 express.json() express.urlencoded() 3.2 日志输出 morgan() 3.3 为客户端提供跨域 ...
- 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...
- BCrypt密码加密
任何应用考虑到安全,绝不能明文的方式保存密码.密码应该通过哈希算法进行加密.有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择. Spring Security 提供了BCryp ...
- shiro 使用md5密码加密 锁定账户
此篇博客根据之前写的shiro快速配置延续的,建议不了解的可以先看看之前的博客. springMVC中快速配置shiro 1.为了使用密码加密,我们新建一个对用户信息操作的工具类 package co ...
- 用户注册密码加密和后端校验的权衡
背景 对于一个系统来说,显然把用户的密码明文存储是大忌,那么必然要加盐加密存储. 在登录注册过程中,密码显然不能明文传输,那么必然会用https来做登录注册接口. 但是 https 并不是绝对安全的, ...
- Java——MD5密码加密
目录 1.MD5概述 1.1.什么是MD5? 1.2.MD5加密作用 1.3.什么要使用MD5加密? 2.MD5加密流程 2.1.工具类导入 2.2.用户注册模块使用MD5 2.3.登录问题解决 1. ...
最新文章
- java adt怎么打开项目,如何在Eclipse中打开Android Studio项目?
- Wireshark分析器分析数据流过程
- jQuery基础(未完待续)
- 装机 win7 64 IE11
- 基于HTML5的网络拓扑图 - 设备状态面板
- java https请求 证书_java发https请求,证书配置
- kaggle:Costa Rican Household Poverty Level Prediction(1)DEA
- java周报简单模板_快速成长从写一份走心的周报开始
- Linux测网速工具,Linux中上下行网速测试工具 speedtest-cli
- Yandex安装第三方crx插件的方法
- 使用DisUnity解包unity资源文件
- Linux下gzip、bzip、zip、tar压缩命令的使用详解
- 用户需求不等于产品需求
- 《C语言入门经典》Ivor Horton第10章习题2
- android 瀑布流 的实现
- Error: unable to perform an operation on node ‘rabbit@rabbitma‘ please see diamostics infoxmation
- html背景颜色图片,HTML背景颜色和背景图片
- Parameter... parameter
- tof摄像头手势识别_揭秘国内独家TOF深度摄像头,助力机器人避障与室内导航
- 程序员35岁前成功的12条黄金法则
热门文章
- 笔记本CPU性能天梯图
- Importerror: libgl.so.1: cannot open shared object file: no such file or directory
- NBA球星库里入股FTX并担任品牌大使,后者此前已签下布雷迪
- 使用C++,用四阶Runge-Kutta的方法来求解一阶常微分方程
- mini6410移植全攻略(3)--uboot移植之支持nand flansh启动(上)
- 四川麻将必胜攻略笔记(入门篇1)
- JSP页面禁用EL表达式的原因和实现方法
- 0805,0603,1206这些封装名字的由来
- 21.VIVO: Visual Vocabulary Pre-Training for Novel Object Captioning
- 原生Hadoop环境下安装Hue