加密算法

MD5三次加密



package com.cy.store.service.impl;

import com.cy.store.entity.User;
import com.cy.store.mapper.UserMapper;
import com.cy.store.service.IUserService;
import com.cy.store.service.ex.InsertException;
import com.cy.store.service.ex.UsernameDuplicatedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils; import java.util.Date;
import java.util.UUID; /**
* 因为要将这个实现类交给spring管理,所以需要在类上加@Service
* @Service注解:将当前类的对象交给Spring来管理,自动创建对象以及对象的维护
**/ @Service
public class UserServiceImpl implements IUserService { //reg方法核心就是调用mapper层的方法,所以要声明UserMapper对象并加@Autowired注解
@Autowired
private UserMapper userMapper; @Override
public void reg(User user) {
//通过user参数来获取传递过来的username
String username = user.getUsername();
//调用mapper的findByUsername(username)判断用户是否被注册过了
User result = userMapper.findByUsername(username);
//判断结果集是否为null,不为null的话则需抛出用户名被占用的异常
if (result != null) {
//抛出异常
throw new UsernameDuplicatedException("用户名被占用");
} /**
* 密码加密处理作用:
* 1.后端不再能直接看到用户的密码2.忽略了密码原来的强度,提升了数据安全性
* 密码加密处理的实现:
* 串+password+串->交给md5算法连续加密三次
* 串就是数据库字段中的盐值,是一个随机字符串
*/
String oldpassword = user.getPassword();
//1.随机生成一个盐值(大写的随机字符串)
String salt = UUID.randomUUID().toString().toUpperCase();
//2.将密码和盐值作为一个整体进行加密处理
String md5Password = getMD5Password(oldpassword, salt);
//3.将盐值保存到数据库
user.setSalt(salt);
//4.将加密之后的密码重新补全设置到user对象当中
user.setPassword(md5Password); //补全数据:is_delete设置为0
user.setIsDelete(0);
//补全数据:四个日志字段信息
user.setCreatedUser(user.getUsername());
user.setModifiedUser(user.getUsername());
Date date = new Date();//java.util.Date
user.setCreatedTime(date);
user.setModifiedTime(date); //执行注册业务功能的实现
Integer rows = userMapper.insert(user);
if (rows != 1) {
throw new InsertException("在用户注册过程中产生了未知的异常");
}
} //进行三次加密
private String getMD5Password(String password,String salt) {
for (int i = 0; i < 3; i++) {
password = DigestUtils.md5DigestAsHex((salt + password + salt).getBytes()).toUpperCase();
}
return password;
} }

【JAVA基础】加密算法的更多相关文章

  1. java 基础题 很基础, 很有趣

    都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...

  2. Java基础学习经验分享

    很多人学习Java,尤其是自学的人,在学习的过程中会遇到各种各样的问题以及难点,有时候卡在一个点上可能需要很长时间,因为你在自学的过程中不知道如何去掌握和灵活运用以及该注意的点.下面我整理了新手学习可 ...

  3. java基础/数据加解密(Mooc)

    一.消息摘要算法 常用摘要算法: 以下 (HEX)内容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1.消息摘要算法MD5及MD族(MD2,MD4) 消 ...

  4. 测开-面试题-Java基础

    1 垃圾回收机制? 答: 一.手动垃圾回收机制(C/C++)手动:使用过的对象必须要程序员自己来回收 缺点: 1.若程序员忘记及时回收--对象会一直在内存中,若程序运行时间很长,内存中存在大量垃圾,空 ...

  5. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  6. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  7. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  8. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  9. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  10. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

随机推荐

  1. 30. 干货系列从零用Rust编写正反向代理,HTTP的组装之旅(中间件)

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  2. 京东广告研发近期入选国际顶会文章系列导读——CIKM 2023篇

    近年来,放眼业界广告推荐领域的算法获得了长足的发展,从几篇奠定基础的序列学习.大规模图学习.在线学习&增强学习.多模态推荐问题等起步,业内算法不断迭代发展并在学术和工业场景上取得不错的应用. ...

  3. 【maven】【外包杯】模块化开发

    什么是maven模块化开发? 在多人协同开发,特别是规模较大的项目,为了方便日后的代码维护和管理,我们会将每个开发人员的工作细分到具体的功能和模块上. 该pom.xml文件多对应的项目称之为Root项 ...

  4. WPF应用框架中工作流模块的介绍

    在前面的随笔,我对我们开发的审批工作流做了不少的介绍,其中有包括WInform的.Vue+Element.Bootstrap Asp.net的,在各个框架上,我们都尽量争取界面能够一致化,以便客户能够 ...

  5. [NOI online2022提高B] 讨论

    题目描述 有 \(n\) 个人正在打模拟赛,模拟赛有 \(n\) 道题目. 有两人都会的题目并且没有人会的题目包含另一个人时,两者之间才会讨论. (定义第 ii 个人会的题目的集合为 \(S_i\) ...

  6. 图扑物联 | WEB组态可视化软件

    01什么是组态? 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统(Distributed Control System),可理解为"配置"."设置" ...

  7. 用python将卡尔曼滤波技术和统计套利应用在期货市场

    背景 根据当前中国的交易规则,股票不能做空.与更发达的市场相反,套利机会不容易实现.这表明那些寻找并能够利用它们的人可能会有机会. 因此,我决定使用统计套利和配对交易技术专注于中国的期货市场. 战略理 ...

  8. jenkins删除构建历史并重置构建序号

    系统管理 工具和动作-->脚本命令执行 删除之前,现在已经构建了156次  输入脚本 println(Jenkins.instance.getJobNames()) //查看获取任务名列表//要 ...

  9. CentOS连接网络设置

    https://blog.csdn.net/tsundere_x/article/details/104263100  用这个 VMware提供了三种将虚拟网卡和物理网卡捆绑起来的方式,即桥接(Bri ...

  10. 从零玩转xxl-job分布式任务调度-xxl-job

    title: 从零玩转xxl-job分布式任务调度 date: 2022-03-18 00:11:55.443 updated: 2023-01-05 10:58:06.991 url: https: ...