【从0做项目】Java音缘心动(3)———加密算法 MD5 BCrypt

 

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

零:项目结果展示

一:音乐播放器Web网页介绍

二:加密算法介绍

1:MD5加密

(1)引入md5算法相关依赖

(2)加盐提高安全性——测试代码

(3)结果

2:BCrypt加密设计

(1)引入依赖

(2)简单理解

(3)测试

3:总结 

三:创建配置Config包

四:配置启动类


零:项目结果展示

项目目前已经上线

音乐播放器登录页面铁子们可以后台私信获取管理员用户和密码

一:音乐播放器Web网页介绍

这个网页主要的功能包括:用户登录,上传音乐,播放音乐,收藏音乐到喜欢列表,从喜欢列表中移除音乐,删除指定音乐,批量删除音乐,

二:加密算法介绍

我们的密码保存在数据库当中,如果数据库被黑了,密码被泄露就g了,这里我们就可以对密码进行加密,下面介绍两种加密算法

1:MD5加密

输⼊两个不同的明⽂不会得到相同的输出值
根据输出值,不能得到原始的明⽂——就是过程不可逆,但是现在除了彩虹表,这样的密码也不安全了,有兴趣的老铁可以了解一下。

(1)引入md5算法相关依赖

        <!-- md5 依赖 -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>

(2)加盐提高安全性——测试代码

这里边看代码边理解更清晰

核心方法就是DigestUtils.md5Hex(传入字符串)经过某种算法后得到一个新的加密后的字符串

package com.example.musicserver;

import org.apache.commons.codec.digest.DigestUtils;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2025-01-15
 * Time: 15:01
 */
public class MD5Util {
    private static final String salt = "1b2i3t4e";

    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }

    /**
     * 第⼀次加密 :模拟前端⾃⼰加密,然后传到后端
     * @param inputPass
     * @return
     */
    public static String inputPassToFormPass(String inputPass) {
        String str = "" + salt.charAt(1) + salt.charAt(3) + inputPass
                + salt.charAt(5) + salt.charAt(6);
        return md5(str);
    }

    /**
     * 第2次MD5加密
     *
     * @param formPass 前端加密过的密码,传给后端进⾏第2次加密
     * @param salt     ⽤⼾数据库当中的盐值
     * @return
     */
    public static String formPassToDBPass(String formPass, String salt) {
        String str = "" + salt.charAt(0) + salt.charAt(2) + formPass
                + salt.charAt(5)
                + salt.charAt(4);
        return md5(str);
    }

    /**
     * 上⾯两个函数合到⼀起进⾏调⽤
     *
     * @param inputPass
     * @param saltDB
     * @return
     */
    public static String inputPassToDbPass(String inputPass, String saltDB) {
        String formPass = inputPassToFormPass(inputPass);
        String dbPass = formPassToDBPass(formPass, saltDB);
        return dbPass;
    }

    public static void main(String[] args) {
        System.out.println("对⽤⼾输⼊密码进⾏第1次加密:" + inputPassToFormPass("123456"));
        System.out.println("对⽤⼾输⼊密码进⾏第2次加密:" + formPassToDBPass(inputPassToFormPass("123456"), "1b2i3t4e"));
        System.out.println("对⽤⼾输⼊密码进⾏第2次加密:" + inputPassToDbPass("123456", "1b2i3t4e"));
    }
}

(3)结果

不管运行多少次,这里的结果都是相同的

2:BCrypt加密设计

(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>
    </dependencies>

(2)简单理解

Bcrypt内部⾃⼰实现了随机加盐处理,这样每次得到的密文都是不同的,而且Bcrypt⽣成的密⽂是60位的破解难度更大,但是加密速度慢

(3)测试

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);

//返回true
        System.out.println("加密的密码和正确密码对⽐结果: " + same_password_result);
        boolean other_password_result = bCryptPasswordEncoder.matches("987654", newPassword);

//返回false
        System.out.println("加密的密码和错误的密码对⽐结果: " + other_password_result);
    }
}

3:总结 

对比:MD5加密,每次加密的盐值是相同的,所以每次得到的密文都是相同的。

Bcrypt相反,内部已经实现了随机盐值,所以每次得到的密文都是不同的。

MD5加密后的密文是32位,加密速度快,但破解起来更容易

Bcrypt加密后的密文是60位的,加密速度更慢,破解难度更大

三:创建配置Config包

新建AppConfig类,给BCryptPasswordEncoder实例化封装一层方法

我们把明文:123456加密后的密文存储在数据库当中。

 @Configuration
    public class AppConfig {
        @Bean
        public BCryptPasswordEncoder getBCryptPasswordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }

四:配置启动类

当启动类,没有加这个过滤的时候,我们发现不能进⾏登录,这是因为在SpringBoot中,默认的Spring Security⽣效了的,此时的接⼝都是被保护的。

此时我们做一些特定的操作可能会被拦截,比如说我们在开发或者测试期间使用某些算法加密,这里我们使用了Scrypt加密嘛,所以就被拦截了

此时通过下述exclude配置,即可禁⽤默认的登录验证。

@SpringBootApplication(exclude =
        {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
//@SpringBootApplication
public class MusicserverApplication {
    public static void main(String[] args) {
        SpringApplication.run(MusicserverApplication.class, args);
    }

}

error展示 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新数据结构(12)——代理

什么是代理 在进行操作时有时不希望用户直接接触到目标&#xff0c;这时需要使用代理让用户间接接触到目标 给目标对象提供一个代理对象&#xff0c;并且由代理对象控制着对目标对象的引用 图解&#xff1a; 代理的目的 控制访问&#xff1a;通过代理对象的方式间接的访问目…

基于大语言模型的推荐系统(1)

推荐系统&#xff08;recommendation system&#xff09;非常重要。事实上&#xff0c;搜索引擎&#xff0c;电子商务&#xff0c;视频&#xff0c;音乐平台&#xff0c;社交网络等等&#xff0c;几乎所有互联网应用的核心就是向用户推荐内容&#xff0c;商品&#xff0c;电影&…

学习threejs,使用MeshBasicMaterial基本网格材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshBasicMaterial 二…

Selenium实战案例2:东方财富网股吧评论爬取

上一篇文章&#xff0c;我们使用Selenium完成了网页内文件的自动下载,本文我们将使用Selenium来爬取东方财富网股吧内笔记的评论数据。 网页内容分析 网页内容的分析是web自动化中的关键一步。通过分析网页结构&#xff0c;我们可以确定需要抓取的数据位置以及操作元素的方式。…

零基础学python--------第三节:Python的流程控制语法

Python&#xff0c;浮点数 11.345(单&#xff1a;4个字节&#xff0c; 双&#xff1a;8个字节) 。 十进制的数字25 ---> 11001 讲一个小数转化为二进制&#xff1a; 不断的乘以2 。取整数部分。 十进制的0.625 ----> 二进制&#xff1a; 0&#xff0c; 101 。 0.3 ---…

MKS SERVO42E57E 闭环步进电机_系列10 STM32_脉冲和串口例程

文章目录 第1部分 产品介绍第2部分 相关资料下载2.1 MKS E系列闭环步进驱动资料2.2 源代码下载2.3 上位机下载 第3部分 脉冲控制电机运行示例第4部分 读取参数示例4.1 读取电机实时位置4.2 读取电机实时转速4.3 读取电机输入脉冲数4.4 读取电机位置误差4.5 读取电机IO端口状态 …

小米路由器 AX3000T 降级后无法正常使用,解决办法

问题描述 买了个 AX3000T 路由器&#xff0c;想安装 OpenWRT 或者 安装 Clash 使用&#xff0c;看教程说是需要降级到 v1.0.47 版本。 结果刷机之后路由器无法打开了&#xff0c;一直黄灯亮&#xff0c;中间灭一下&#xff0c;又是黄灯长亮&#xff0c;没有 WIFI 没有连接。以…

强化学习-GAE方法

2016-ICLR-HIGH-DIMENSIONAL CONTINUOUS CONTROL USING GENERALIZED ADVANTAGE ESTIMATION 解决问题 强化学习的目标为最大化策略的预期总回报&#xff0c;其中一个主要困难为 行为对reward的影响存在一个长时间的延迟&#xff08;credit assignment problem&#xff09;。价…

写大论文的word版本格式整理,实现自动生成目录、参考文献序号、公式序号、图表序号

前情提要&#xff1a;最近开始写大论文&#xff0c;发现由于内容很多导致用老方法一个一个改的话超级麻烦&#xff0c;需要批量自动化处理&#xff0c;尤其是序号&#xff0c;在不断有增添删减的情况时序号手动调整很慢也容易出错&#xff0c;所以搞一个格式总结&#xff0c;记…

清华大学deepseek教程第四版 DeepSeek+DeepResearch 让科研像聊天一样简单(附下载)

deepseek使用教程系列 DeepSeekDeepResearch 让科研像聊天一样简单(附下载) https://pan.baidu.com/s/1VMgRmCSEzNvhLZQc8mu6iQ?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/f3d4511b790a

面阵工业相机提高餐饮业生产效率

餐饮行业是一个快节奏、高要求的领域&#xff0c;该领域对生产过程中每一个阶段的效率和准确性都有很高的要求。在食品加工、包装、质量控制和库存管理等不同生产阶段实现生产效率的优化是取得成功的关键步骤。面阵工业相机能够一次性捕捉对象的二维区域图像&#xff0c;并支持…

Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux软件包管理器–apt Linux安装软件的方式 在Linux下安装软件的方法有以下三种&#xff1a; 下载到程序的源代码&#xff0c;自己编译出可执行程序获取deb安装包、然后使用dpkg命令安装。&#xff08;不解决依赖关系&#xff09;通过apt进行安装软件。 小知识点&#xf…

【vue项目如何利用event-stream实现文字流式输出效果】

引言 在现代 Web 应用中&#xff0c;实时数据展示是一个常见需求&#xff0c;例如聊天消息逐字显示、日志实时推送、股票行情更新等。传统的轮询或一次性数据加载方式无法满足这类场景的流畅体验&#xff0c;而 流式传输&#xff08;Streaming&#xff09; 技术则能实现数据的…

算法——Boyer-Moore算法

引言 在字符串匹配算法中&#xff0c;Boyer-Moore算法以其高效性和巧妙的设计而著称。它广泛用于文本搜索、编译器词法分析、信息检索等领域。本文将详细解读Boyer-Moore算法的原理、步骤&#xff0c;并通过实践案例展示其应用。 Boyer-Moore算法简介 Boyer-Moore算法是一种…

智能网络感知,打造极致流畅的鸿蒙原生版中国移动云盘图文体验

背景 中国移动云盘&#xff08;原“和彩云网盘”&#xff09;是中国移动重磅推出的安全、智能、不限速、移动用户免流的智能云盘&#xff0c;致力于成为5G时代用户个人与家庭的数字资产管理中心&#xff0c;是中国移动继语音、短信、流量后的“第四项基础服务”。 照片、音视…

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择&#xff1a; CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集&#xff0c;用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目&#xff0c;旨在提供类Uni…

VS Code 如何搭建C/C++开发环境

目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…

详解同为科技桌面PDU系列产品特点

同为科技的桌面PDU系列产品是依据自身在电气联接领域25年专业积累并精心设计&#xff0c;产品采用模块化结构&#xff0c;实现各种功能、输出插口、输入方式可根据用户需求以模块组合的方式构建定制化产品。 桌面PDU产品特点 工业级材质和结构设计 桌面PDU系列产品采用一体成…

【排版教程】如何在Word/WPS中优雅的插入参考文献

材料展示 随便选取一段综述内容&#xff0c;以及对应的参考文献&#xff0c;如下图所示&#xff1a; 1 参考文献编辑 首先对参考文献部分进行编辑&#xff0c;将其设置自动编号 在段落中&#xff0c;选择悬挂缩进 在编号中&#xff0c;设置自定义编号&#xff0c;然后按照…