Javaweb实战中,对用户密码密码进行加密加盐,提高用户信息安全性

本文主要是介绍Javaweb实战中,对用户密码密码进行加密加盐,提高用户信息安全性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

5.3.1加密方式

  1. 对称加密:明文按照一定规则加密成密文,这个密文可以按照对应的规则解密成明文。(隐患:当黑客知道加密规则后就可以解密,如base64)
  2. 非对称加密:明文按照一定规则加密成密文,密文没有对应的规则解密成明文。(加密后的明文是不能解密的,如MD5),但现在网上已经有了非对称加密的加密解密网址,如果黑客到的用户的密码的密文在该网站上输入密文,就可以得到该密码的明文(理论上加密后的明文是不能解密的,但这些网站通过穷举法就可以解密,底层原理十分复杂,规避方法为设置用户密码时不能为纯数字,或者对加密后的密文进行再次加密,但不能保证完全规避)

5.3.2加盐

为了有效应对黑客通过穷举法破解非对称加密,对用户输入的明文进行加盐后,再进行非对称加密操作。

加盐是在用户输入密码明文后进行,对密码明文的前面后面或者中间某个位置加入自定义的字符串,然后通过非对称加密加密技术(MD5)进行加密,得到的密文存储到数据库中,这样即使黑客攻破了数据库拿到了加密后的密文,并对密文通过穷举法进行转换,转换后也得不到正确的密文,而是得到用户密码和加盐后的字符串(还是建议密码不是纯数字)。

1.创建MD5工具类

package com.it.untils;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5Utils {public static String mdtEncode(String str){String pwd=null;try {MessageDigest md5 = MessageDigest.getInstance("MD5");//获得一个MD5加密的客户端md5.update(str.getBytes());//对用户输入的密码进行加密处理,参数为字节数组byte[] digest = md5.digest();//加密pwd = new BigInteger(1, digest).toString(16);//字节数组转16进制字符串} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return pwd;}//    public static void main(String[] args) {
//        System.out.println(MD5Utils.mdtEncode("123456"));
//    }
}

2.在业务类中调用MD5工具类中的方法

package com.it.service;import com.it.dao.ManagerDao;
import com.it.entity.Manager;
import com.it.untils.MD5Utils;import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;//用于实现管理员相关的业务
public class ManagerService {/*** 根据管理员输入的用户名和密码来判断登录是否成功* @param loginName* @param loginPwd* @return 如果登录成功返回manager对象,否则返回null*/public Manager checkManagerLogin(String loginName,String loginPwd) throws SQLException, NoSuchAlgorithmException {ManagerDao managerDao=new ManagerDao();Manager manager = managerDao.selectManagerByLoginName(loginName);//如果查询的结果不为空,表示登录名是正确的。if (manager!=null){//判断密码//对登录页面输入的密码进行加密String  pwd= MD5Utils.mdtEncode(loginPwd);//使用加密后的密文再与数据库中的密码的密文进行比较if (!pwd.equals(manager.getLoginPwd())){return null;}}return manager;}
}

通过DeBug模式可以看成,经过工具类的加工,原来的密码123456加密成了16进制的MD5规则加密的字符串,与数据库中提前加密好的123456的密文是一样的。

加密MD5网站

http://www.jsons.cn/md5/s/

这篇关于Javaweb实战中,对用户密码密码进行加密加盐,提高用户信息安全性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_59334478/article/details/124913147
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/378322

相关文章

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(