首页 > 其他分享 >SpringBoot整合MD5加密完成注册和登录

SpringBoot整合MD5加密完成注册和登录

时间:2024-10-10 16:51:12浏览次数:3  
标签:username password 加密 String MD5 public SpringBoot

目录

md5是什么?

MD5 的主要特点包括:

MD5 的应用场景

市面上比较流行的加密方式

引入相关依赖

在src/main/resources/application.yml 中添加配置

加密工具类

创建 User 实体类

创建 UserRepository 接口

创建 UserService 类

创建 UserController 类

测试 API


md5是什么?

     MD5(Message Digest Algorithm 5)是一种常用的哈希算法,特点是生成的哈希值长度固定为128位(32位16进制表示)。MD5加密后的字符串是不可逆的,即无法通过加密后的字符串还原出原始字符串。

MD5 的主要特点包括:

  1. 固定长度输出:无论输入数据的大小如何,输出始终为 128 位。
  2. 快速计算:MD5 算法在计算上相对简单,因此速度较快。
  3. 不可逆性:理论上,MD5 的输出不能被逆向推导回原始输入。
  4. 抗碰撞性:理想情况下,不同的输入数据不应产生相同的哈希值,但随着计算能力的提高,MD5 已被证明存在碰撞(即不同输入产生相同输出)的漏洞。

MD5 的应用场景

  1. 数据完整性校验:如文件下载时,提供 MD5 校验和以确保传输中未被篡改。
  2. 存储密码:将用户密码存储为 MD5 散列值,而不是明文密码,增加安全性。
  3. 数字签名:在某些情况下,可以使用 MD5 生成数据的数字签名。

市面上比较流行的加密方式

1. AES (Advanced Encryption Standard)

  • 类型:对称加密

  • 用途:数据加密,广泛应用于文件加密、VPN、数据库等。

  • 特性:安全性高,效率快,支持128、192、256位密钥。

2. RSA (Rivest-Shamir-Adleman)

  • 类型:非对称加密

  • 用途:数据加密和数字签名,常用于安全通信(例如SSL/TLS)。

  • 特性:基于大数分解的难题,密钥长度通常为2048位或以上。

3. ECC (Elliptic Curve Cryptography)

  • 类型:非对称加密

  • 用途:数据加密和数字签名,特别是在资源受限的设备上。

  • 特性:相对于RSA,提供同样安全性但使用更短的密钥。

4. Blowfish 和 Twofish

  • 类型:对称加密

  • 用途:数据保护,广泛用于软件和硬件加密。

  • 特性:速度快,密钥长度可变,Blowfish支持32到448位密钥,而Twofish支持128、192、256位密钥。

5. 3DES (Triple DES)

  • 类型:对称加密

  • 用途:数据加密,曾广泛用于金融行业。

  • 特性:对每个数据块执行三次DES加密,但相较于AES较为过时。

6. SHA (Secure Hash Algorithm)

  • 类型:散列函数

  • 用途:数据完整性验证,常用于数字签名和密码存储。

  • 特性:包括SHA-1、SHA-256等,SHA-256是目前最常用的版本。

引入相关依赖

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <!-- H2 Database -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Starter Test (可选) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

src/main/resources/application.yml 中添加配置

spring:
  h2:
    console:
      enabled: true # 启用 H2 控制台
  datasource:
    url: jdbc:h2:mem:testdb # H2 内存数据库连接 URL
    driver-class-name: org.h2.Driver # H2 驱动类
    username: sa # 数据库用户名
    password: '' # 数据库密码(默认为空)
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect # 使用 H2 方言

加密工具类

import java.security.MessageDigest;

public class MD5Util {

    // MD5 加密方法
    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5"); // 创建 MD5 实例
            byte[] messageDigest = md.digest(input.getBytes()); // 获取加密后的字节数组
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b); // 转换为十六进制字符串
                if (hex.length() == 1) hexString.append('0'); // 补零
                hexString.append(hex);
            }
            return hexString.toString(); // 返回十六进制字符串
        } catch (Exception e) {
            throw new RuntimeException("MD5 encryption error", e); // 抛出运行时异常
        }
    }
}

创建 User 实体类

package com.example.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity // 标记该类为 JPA 实体类
public class User {
    @Id // 标记为主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 主键自增策略
    private Long id; // 用户 ID
    private String username; // 用户名
    private String password; // 密码

    // Getter 和 Setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

创建 UserRepository 接口

package com.example.repository;

import com.example.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

// UserRepository 接口,继承 JpaRepository 提供基本的 CRUD 操作
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username); // 根据用户名查找用户
}

创建 UserService 类

@Service // 标记为服务类,供 Spring 管理
public class UserService {
    @Autowired // 自动注入 UserRepository
    private UserRepository userRepository;

    // 用户注册方法
    public User register(String username, String password) {
        // 检查用户名是否已存在
        if (userRepository.findByUsername(username) != null) {
            throw new RuntimeException("用户名已存在"); // 抛出异常或返回错误信息
        }

        User user = new User(); // 创建新的用户实例
        user.setUsername(username); // 设置用户名
        user.setPassword(MD5Util.md5(password)); // 使用工具类进行 MD5 加密
        return userRepository.save(user); // 保存用户到数据库
    }

    // 用户登录方法
    public boolean login(String username, String password) {
        User user = userRepository.findByUsername(username); // 查找用户
        // 检查用户是否存在及密码是否匹配
        return user != null && user.getPassword().equals(MD5Util.md5(password));
    }
}

创建 UserController 类

package com.example.controller;

import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

// 控制器类,处理用户相关请求
@RestController
@RequestMapping("/api/users") // 设置请求路径前缀
public class UserController {
    @Autowired // 自动注入 UserService
    private UserService userService;

    // 用户注册接口
    @PostMapping("/register")
    public String register(@RequestParam String username, @RequestParam String password) {
        userService.register(username, password); // 调用注册服务
        return "User registered!"; // 返回注册成功信息
    }

    // 用户登录接口
    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 调用登录服务并返回结果
        return userService.login(username, password) ? "Login successful!" : "Login failed!";
    }
}

测试 API

 使用Postman测试或者ApiPost

标签:username,password,加密,String,MD5,public,SpringBoot
From: https://blog.csdn.net/2301_81405087/article/details/142789744

相关文章

  • SHA256加密-前端 中 HMAC-SHA256的base64加密 和 md5加密
    1、 HMAC-SHA256的base64加密首先npminstallcrypto-js--save项目中使用12345import CryptoJSfrom 'crypto-js';  consthash=CryptoJS.HmacSHA256(zhuan, 'secret');//第一个参数为转换的字符串第二个参数有很多种可能看需要转换的格式consthas......
  • Springboot二手车估值与销售网络平台l0471(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表客户,汽车分类,车辆信息,车辆估价,商家开题报告内容一、研究背景随着汽车消费市场的不断扩大和二手车交易的增多,设计和实现一个二手车估值与销售网络平台具有重......
  • Springboot动漫图片分享网站k3r27(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,画手,图片分类,图片分享,求稿任务,接稿请求开题报告内容一、研究背景随着互联网技术的飞速发展和动漫文化的普及,越来越多的人开始分享和欣赏动漫图片。然......
  • swagger加密码
    <!--swagger-api依赖开始--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependenc......
  • 高效美发店运营:SpringBoot管理系统详解
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发合适的美发门店管理系统,可以方便管理人员对美发......
  • 【关注可白嫖源码】springboot基于微信小程序的二手书籍交易平台
    摘 要国内的京东商城、天猫、苏宁易购等大型网站在图书销售等商品零售领域已经十分成熟完善,但是以高校学生二手书为主的二手图书资源目前还没有得到合理的开发利用。本人设计和实现的基于微信小程序的二手书籍交易平台是通过合理的市场调查然后才着手实施的。系统分前端和......
  • 【关注可白嫖源码】Springboot+VUE的学生选课系统
    摘要随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的学生选课系统来管理学生选课信息,会使管理工作系统化、规范化,提高管理效率。本课题的研究对象是学生选课系统,该系统......
  • 【开题报告+论文+源码】基于SpringBoot及Vue的宿舍软装租赁平台
    项目背景与意义随着科技的飞速发展和人们生活水平的不断提升,大学生对于宿舍环境的个性化需求也日益增长。宿舍作为大学生日常生活的重要场所,其软装的舒适度和美观度直接影响到学生的居住体验。因此,宿舍软装租售市场逐渐兴起,并呈现出蓬勃的发展态势。然而,传统的宿舍软装租售方......
  • 【开题报告+论文+源码】基于SpringBoot+Vue的个人博客系统设计与实现
    项目背景与意义当前,个人博客系统作为一种自由、开放的网络平台,已经成为个人展示、交流和分享的重要途径。然而,传统的个人博客系统在功能性和安全性方面存在一些问题。许多传统的个人博客系统功能单一,用户体验不够友好,同时在安全性方面也存在一定隐患,例如容易受到SQL注入、XSS......
  • 基于SpringBoot+MySQL+SSM+Vue.js的电影票信息管理系统(附论文)
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频基于SpringBoot+MySQL+SSM+Vue.js的电影票信息管理系统(附论文)技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot......