项目7-音乐播放器1+BCrypt加密

2024-04-16 01:36

本文主要是介绍项目7-音乐播放器1+BCrypt加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.创建项目

1.1 引入依赖

1.2 yml相关配置

application.yml

spring:profiles:active: prod
mybatis:mapper-locations: classpath:mapper/**Mapper.xmlconfiguration:map-underscore-to-camel-case: true #配置驼峰⾃动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
# 设置⽇志⽂件的⽂件名
logging:file:name: spring-book.log

 application-dev.yml

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/数据库名称?characterEncoding=utf8&useusername: rootpassword: 买的服务器的数据库密码driver-class-name: com.mysql.cj.jdbc.Driver

 application-prod.yml

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/数据库名称?characterEncoding=utf8&useusername: rootpassword: 本机数据库密码driver-class-name: com.mysql.cj.jdbc.Driver

先看项目是否创建成功!!!

启动项目

http://127.0.0.1:8080/login.html

 项目创建成功

2.项目前端页面展示

2.1 login.html登陆界面

2.2 音乐播放列表收藏界面list.html

2.3 上传界面upload.html 

1.4 喜欢的音乐列表界面love Music.html

3.数据准备

3.1 数据库准备

根据前端界面,我们需要准备三张表

两张实体表,一张关系表

创建数据库

-- 数据库
drop database if exists `musicvideoserver`;
create database if not exists `musicvideoserver` character set utf8;
-- 使用数据库
use `musicvideoserver`;

创建表user

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` INT PRIMARY KEY AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(255) NOT NULL
);
INSERT INTO user(username,password)
VALUES("bit","123456");

创建表music

DROP TABLE IF EXISTS `music`;
CREATE TABLE `music` (
`music_id` int PRIMARY KEY AUTO_INCREMENT,
`title` varchar(50) NOT NULL,
`singer` varchar(30) NOT NULL,
`time` DATETIME DEFAULT now(),
`url` varchar(1000) NOT NULL,
`user_id` int(11) NOT NULL
);

url为歌曲存放路径

创建中间表(关系表)lovemusic

DROP TABLE IF EXISTS `lovemusic`;
CREATE TABLE `lovemusic` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`music_id` int(11) NOT NULL
);

完成

3.2 建包 

4.实体类(Model包)

需要与数据库的字节一一对应 

user类

 music类

Util,Util通常来说是我们找不到合适的名字的时候的选择,Util就是工具,在做项目的时候我们总会遇到一些奇奇怪怪的小功能或者重复的代码需要提取。像是URL编码或者解码(当然这个类库通常会提供,不过就以 .NET Framework 为例,提供这个方法的类型名称叫做HttpUtility),或是自创的加密签名算法等等。

lovemusic类

5.Result类统一返回 

5.2 返回成功 

5.3 异常返回 

6.登录界面的实现 

6.0 接口定义

请求:
{
post,
/user/login
data:{username,password}
}
响应:
{
"status": 0,
"message": "登录成功",
"data": {
"id": xxxxx,
"username": xxxxxx,
"password": xxxxxxxx
}
}

6.1 Mapper层

6.2 Service层 

6.3 Controller层 

6.4 后端接口测试

 

6.5 前后端交互 

6.6 前端界面测试 

成功!!!

6.7  BCrypt加密

Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。你也可以简单理解为它内部自己实现了随机加盐处理 。我们使用MD5加密,每次加密后的密文其实都是一样的,这样就方便了MD5通过大数据的方式进行破解。Bcrypt生成的密文是60位的。而MD5的是32位的。Bcrypt破解难度更大。

6.7.1 引入依赖

<!-- security依赖包 (加密)-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>

6.7.2 在springboot启动类添加

@SpringBootApplication(exclude ={org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})

因为我们用的是依赖包下的某一类

public class BCryptTest {public static void main(String[] args) {
//模拟从前端获得的密码String password = "123456";BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();String newPassword = bCryptPasswordEncoder.encode(password);System.out.println("加密的密码为: "+newPassword);
//使用matches方法进行密码的校验boolean same_password_result = bCryptPasswordEncoder.matches(password,newPassword);
//返回trueSystem.out.println("加密的密码和正确密码对比结果: "+same_password_result);boolean other_password_result = bCryptPasswordEncoder.matches("987654",newPassword);
//返回falseSystem.out.println("加密的密码和错误的密码对比结果: " + other_password_result);}
}

encode方法:对用户密码进行加密
matches方法:参数一,待检验的未加密的密码 。参数二:从数据库中查询出的加密后密码 。 

总结:
1. 密码学的应用安全,是建立在破解所要付出的成本远超出能得到的利益上的 。
2. 使用BCrypt相比于MD5加密更好的一点在于,破解的难度上加大
3. BCrypt的破解成本增加了,导致系统的运行成本也会大大的增加 。
4. 回到本质的问题,你的数据库中的数据价值如何?如果你是银行类型的,那么使用BCrypt是不错的,一般情况使用MD5加盐,已经够用了。 

6.8 登陆界面实现BCrypt加密

@Autowired//在自动装配之前,需要完成注入,我们再AppConfig中进行注入
private BCryptPasswordEncoder bCryptPasswordEncoder;(需要@Bean进行管理)

 由于我们并没有登录接口,我们只能mock一下。

INSERT INTO user(username,password)
VALUES("bit","$2a$10$4ScPiSgTJo8MZgtrYJ2h3.wYbi/dEhwDigT/ZHGwjoVCND8kBBUDO");//123456

bit,123456

muyier,123

lay,123

设定账户名称为唯一值

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` INT PRIMARY KEY AUTO_INCREMENT,
`username` varchar(20) UNIQUE NOT NULL,
`password` varchar(255) NOT NULL
);
INSERT INTO user(username,password)
VALUES("bit","$2a$10$4ScPiSgTJo8MZgtrYJ2h3.wYbi/dEhwDigT/ZHGwjoVCND8kBBUDO");
INSERT INTO user(username,password)
VALUES("lay","$2a$10$.BvcAndeb2JlhAdFwQjlBezi9GsTqrV4oAu6c6bBoFG0fNxzdYYiq");
INSERT INTO user(username,password)
VALUES("muyierf","$2a$10$.BvcAndeb2JlhAdFwQjlBezi9GsTqrV4oAu6c6bBoFG0fNxzdYYiq");

 修改接口

 和加密后的数据进行比较

重新测试!!!

成功!!! 

这篇关于项目7-音乐播放器1+BCrypt加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907472

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin