关于登录密码加密的三个方式

2023-11-18

        登录密码对于用户来说是最重要的数据,所以在存储的时候需要进行加密,防止在一些外部攻击下用户重要数据被别人获取了。对于登录密码加密,本人整理了三种简单的方式。

具体思路如下:

一、数据库加密

1、在后端存入数据库时,通过sql语句进行对应数据库的数据加密方式,具体sql语句如下:

(1)敏感数据参数#{data}改为AES_ENCRYPT(#{data},'MySQL')

//在dao层写一条插入语句,插入用户名和密码,密码加密
@Insert("insert into user values(#{username},AES_ENCRYPT(#{password},'MySQL'))")
public int addUser(String username,String password);

 

2、在建表时,对应密码字段的类型改为用varbinary类型存储,具体sql语句如下:

create database lib;
use lib;
create table user(
	username varchar(11),
    password varbinary(255)
);

 

3、这里省略service层,在controller层添加插入方法,用apifox测试接口,插入成功

//当插入成功就返回true
@PostMapping("/user")
public boolean addUser(String username,String password){
    return userDao.addUser(username,password);
}

 

 3、前往数据库查看数据库中的数据是否加密,可以看到密码加密成功

 

 4、但这种加密方式是可以解密的,可以通过sql语句如下解密,所以不太建议使用。

@Select("select username,AES_DECRYPT(password,'MySQL') AS password from user where username=#{username} and password = #{password}")
public User searchUser(@Param("username") String username,@Param("password") String password);

 

 二、后端创建工具类MD5加密

1、新建工具类

public class HashEncryption {
    public String encrypt(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(password.getBytes("UTF-8"));
        byte[] results = md.digest();
        StringBuilder sb = new StringBuilder();
        for (byte bite : results) {
            sb.append(String.format("%02x", bite));
        }
        return sb.toString();
    }
}

 

2、controller层new 工具类,传递密码参数返回加密后的密码,插入成功同样返回true

@PostMapping("/user")
    public boolean addUser(String username,String password) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        HashEncryption hashEncryption=new HashEncryption();
        return userService.addUser(username,hashEncryption.encrypt(username));
    }

 

3、apifox测试方式同上,控制台debug结果如下,插入的密码为加密后的b0baee9d279d34fa1dfd71aadb908c3f

 

4、这种方式不会被解密,但是可能会让别人通过拦截前端传递的数据,得到前端未加密的数据。

 

 三、前端加密

1、通过前端加密后传递给后端加密后的密码

可以参考:前端利用md5进行加密_js-md5 -d_~天吻蓝了海的博客-CSDN博客

 

四、总结

1、数据库加密,可能会被解密

2、后端工具类加密,可能会被别人拦截前端传递的数据,导致泄露。

3、前端加密是一个优解,在不影响执行速度情况下。当然想前后端都加密一次也可以。

 

希望我的文章对你有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于登录密码加密的三个方式 的相关文章

随机推荐

  • Arduino 运行 Rust

    项目设置 首先 我们将通过运行来创建一个新的 cargo 项目 我们需要为 avr 目标 目标三元组 avr unknown unknown 交叉编译我们的项目 为此 我们需要切换到 nightly 工具链 因为一些依赖包使用不稳定的功能来
  • 浅谈Java平台无关性

    为什么Java要支持平台无关性 众所周知 Java是平台无关的语言 那么Java为什么要支持平台无关性 总结一下 有如下几点 支持多变的网络环境 如今是一个互联网的时代 网络将各种各样的计算机和设备连接起来 比如网络连接了windows的P
  • 仪表放大器 电流的检测

    完美的减法运算放大电路 引入缓冲器 固定增益的双运放仪表放大器 12倍放大 电流的检测 错误接法 正确接法
  • LVS的原理

    一 LVS的介绍 linux virtual server简称LVS Internet的快速增长使多媒体网络服务器面对的访问数量快速增加 服务器需要具备提供大量并发访问服务的能力 因此对于大负载的服务器来讲 CPU I O处理能力很快会成为
  • 最火爆的开源流式系统Storm vs 新星Samza

    分布计算系统框架 按照数据集的特点来说 主要分为data flow和streaming两种 data flow主要是以数据块为数据源来处理数据 代表有 MR Spark等 我称作它们为大数据 而streaming主要是处理单位内得到的数据
  • Python每日一题 - 9 - 暂停5秒输出问题

    前言 本人因喜欢python和c语言等程序设计语言 希望能够在这里和大家共同学习共同进步 因个人喜好喜欢做题 所以想出一个系列专栏关于python的习题专集 希望大家喜欢 希望能在这里分享学习的一些知识碎片 接触时间不长 如果文章有任何错误
  • java中的八种数据类型、变量与常量

    内存空间所占字节数 8位等于1字节 数值型 1 整数类型 byte 1 short 2 int 4 long 8 2 浮点类型 float 4 double 8 字符型 char 2 布尔型 boolean 1或4 取值范围 byte 12
  • vue3.0全局引入sass

    在项目开发过程中 有一些共同的sass样式我想抽出封装到一个文件 利用sass的mixin语法来封装变量 但是在这个过程中一直会报错 先是识别不出来 mixin 和 include 后来是报错sass等一些插件的问题 后来是这样解决的 首先
  • C++ 简介

    C c plus plus 是一种静态类型的 编译式的 通用的 大小写敏感的 不规则的编程语言 支持过程化编程 面向对象编程和泛型编程 C 被认为是一种中级语言 它综合了高级语言和低级语言的特点 C 是由 Bjarne Stroustrup
  • 模仿苹果手机虚拟键的代码分享,有兴趣的可以玩玩。 下面的是链接,复制粘贴到浏览器就能下载...

    http files cnblogs com files godlovexq 模仿苹果虚拟home键的效果有解释的 zip 转载于 https www cnblogs com godlovexq p 5252782 html
  • C语言函数大全-- i 开头的函数

    i 开头的函数 1 imagesize 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 initgraph 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 inport 3 1 函数说明 3 2 演示示例 4 insli
  • 再探ROP(上)

    0x00 前言 毕设和论文要搞吐了 再加上实习工作上的事情 近期又要开始准备HW的事情 只能先更新一部分 0x01 从x86到x64 之前的rop都是32bit的程序 由于这篇文章涉及的方法用于64bit的程序 这里先说一下两者的区别 做一
  • 数值分析(10)-数值微分

    整理一下数值分析的笔记 目录 1 误差 2 多项式插值与样条插值 3 函数逼近 4 数值积分与数值微分 THIS 5 线性方程组的直接解法 6 线性方程组的迭代解法 7 非线性方程求根 8 特征值和特征向量的计算 9 常微分方程初值问题的数
  • Docker - 超轻量中文ocr开源项目 chineseocr_lite 搭建

    Docker 超轻量中文ocr开源项目 chineseocr lite 搭建 一 OCR Docker 部署 二 Flask RESTful API demo chineseocr lite 源码地址 https github com ou
  • Qt/C++使用QUiLoader动态加载ui资源文件

    目录 动态对话框 使用场景 注意事项 动态对话框加载 获取动态对话框的控件对象 与动态对话框建立关联 动态修改ui资源文件效果测试 动态对话框 动态对话框 dynamic dialog 就是在程序运行时使用的从Qt设计师的 ui文件创建而来
  • Linux命令 - zip命令

    Linux命令 zip命令 Linux中 zip 命令是个使用广泛的压缩程序 文件经它压缩后会另外产生具有 zip 扩展名的压缩文件 1 语法 zip 参数 文件或目录 2 功能 可以压缩文件且保留源文件 3 参数 A 调整可执行的自动解压
  • 信号完整性揭秘:于博士SI设计手记----阅读笔记

    文章目录 1 概述 2 数字信号的频谱与带宽 3 传输线 1 概述 1 尽管信号是数字的 但是承载这些信息的电压或电流波形是模拟的 2 SI的根本问题 是信号的上升时间减小了 上升时间越小 信号中包含的高频成分越多 导致的互相耦合得到的畸变
  • YOLOv4 tensorrt推理 python版【附代码】

    学了几天的tensorRT 又经过了几天的努力终于实现了YOLOv4 tensorRT推理 这篇文章将把这些成果开源出来 供大家免费使用 YOLOv4代码我采用的是b站up主Bubbliiiing 相信大家应该都比较熟悉这位大佬 关于trt
  • 基于XMind的E-R图制作

    基于XMind的E R图制作 使用工具 XMind2021 E R图我们再熟悉不过 又称实体 联系图 E R图有许多绘制方式 网上也有许多工具和教程 今天我们来采取一种不太正规的手段 使用一款新的软件进行演示 XMind 这款应用我们也不陌
  • 关于登录密码加密的三个方式

    登录密码对于用户来说是最重要的数据 所以在存储的时候需要进行加密 防止在一些外部攻击下用户重要数据被别人获取了 对于登录密码加密 本人整理了三种简单的方式 具体思路如下 一 数据库加密 1 在后端存入数据库时 通过sql语句进行对应数据库的