面试--你的数据库中密码是如何存储的?

news2025/1/22 1:17:35

文章目录

      • 三种分类
      • 使用 MD5 加密存储
      • 加盐存储
      • Base64 编码:
      • 常见的对称加密算法
      • 常见的非对称加密算法
      • https 传输加密

在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。

我们要对数据库的密码进行加密,那么就会问道常用的一些加密算法了。

三种分类

1.对称加密,密钥只有一个,加密和解密都是这个密码。

2.非对称加密,密钥是成对出现了,一个是公钥另一个是私钥。加密和解密使用不同的密钥。加密速度较慢,这个还可以结合 Https 去问.

3.Hash 算法,这是一种不可逆的算法,用于验证数据的完整性。但是可能会被暴力破解

使用 MD5 加密存储

创建一个 MessageDigest 创建一个 md5 的消息摘要,对 123456 进行加密.

public class MD5 {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 创建一个MD5消息摘要
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        // 计算字符串的MD5值
        byte[] bytes = md5.digest("123456".getBytes());

        // 输出MD5值
        for (byte b : bytes) {
            System.out.printf("%02x", b);
        }
    }
}

MD5 加密本身是不可逆向的,也就是不可破解,但可以建立 MD5 加密数据库,把常见的密码加密之后使用数据库存储起来.然后就能够实现破解.这样是非常不安全的.

加盐存储

可以在密码的前面或者后面加一个字符串,然后再进行加密,并且每次加密的都要不一样. 这个字符串叫做盐值,我们把这个盐存储到数据库中去,当用户登录的时候从数据库中再取出这个盐,进行密码的校验.

使用 UUID 生产不重复的字符串.进行加密

public static void main(String[] args) throws NoSuchAlgorithmException {
    UUID    uuid = UUID.randomUUID();
    String  str  = uuid.toString().substring(0, 8);
    // 创建一个MD5消息摘要
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    // 计算字符串的MD5值
    String password = str + "123456";
    byte[] bytes = md5.digest(str.getBytes());
    // 输出MD5值
    for (byte b : bytes) {
        System.out.printf("%02x", b);
    }
}

即使相同的密码在数据库中存储的也是不一样的.

Base64 编码:

Base64 编码是将二进制的数据如图片、音频文件等信息打印成字符编码方式,使用 64 个字符 A-Z a-z 0-9 + / 来表示二进制数据。

二进制数据是 8 位一组,表示一个字节的,Base64 编码是按照 6 位一组的,每一个 Base64 编码字符代表 6 位二进制数据。

如果输入的数据不是三字节的的证书背书,会进行填充。

前面带上 前缀 用于在 html 页面中显示对应的图片。图片如果越大,对应的编码长度也就越大。

public  static String prefix = "data:image/png;base64,";
public static String encodeImageToBase64(String imagePath) {
try {
    // 读取图片文件
    byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));

    // 使用 Java 8 Base64 类进行编码
    return prefix+Base64.getEncoder().encodeToString(imageBytes);
} catch (IOException e) {
    e.printStackTrace();
    return null;
}
}

将生产的 Base64 便阿门直接复制到浏览器中就可以显示出来图片。

用途 用来执着前端页面的验证码信息,使用 Base64 编码。

常见的对称加密算法

只用一个密钥,如果密钥被泄露了那么会出现安全的问题.

https://blog.csdn.net/u014294681/article/details/86690241

常见的非对称加密算法

https://blog.csdn.net/u014294681/article/details/86705999

https 传输加密

https://segmentfault.com/a/1190000021494676

https 在交换证书的时候使用的是非对称加密,在传输过程中使用的还是对称加密的方式.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模型部署工具01:Docker || 用Docker打包模型 Build Once Run Anywhere

Docker 是一个开源的容器化平台,可以让开发者和运维人员轻松构建、发布和运行应用程序。Docker 的核心概念是通过容器技术隔离应用及其依赖项,使得软件在不同的环境中运行时具有一致性。无论是开发环境、测试环境,还是生产环境,Do…

Restormer: Efficient Transformer for High-Resolution Image Restoration解读

论文地址:Restormer: Efficient Transformer for High-Resolution Image Restoration。 摘要 由于卷积神经网络(CNN)在从大规模数据中学习可推广的图像先验方面表现出色,这些模型已被广泛应用于图像复原及相关任务。近年来&…

四、CSS效果

一、box-shadow box-shadow:在元素的框架上添加阴影效果 /* x 偏移量 | y 偏移量 | 阴影颜色 */ box-shadow: 60px -16px teal; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */ box-shadow: 10px 5px 5px black; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影扩散半…

火狐浏览器Firefox一些配置

没想到还会开这个…都是Ubuntu的错 一些个人习惯吧 标签页设置 常规-标签页 1.按最近使用顺序切换标签页 2.打开新标签而非新窗口(讨厌好多窗口) 3.打开新链接不直接切换过去(很打断思路诶) 4.关闭多个标签页时不向我确认 启动…

MECD+: 视频推理中事件级因果图推理--VLM长视频因果推理

论文链接:https://arxiv.org/pdf/2501.07227v1 1. 摘要及主要贡献点 摘要: 视频因果推理旨在从因果角度对视频内容进行高层次的理解。然而,目前的研究存在局限性,主要表现为以问答范式执行,关注包含孤立事件和基本因…

Python基于Django的社区爱心养老管理系统设计与实现【附源码】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

Docker 单机快速部署大数据各组件

文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…

【MySQL】:Linux 环境下 MySQL 使用全攻略

📃个人主页:island1314 🔥个人专栏:MySQL学习 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 1. 背景 🚀 世界上主…

【思科】NAT配置

网络拓扑图 这个网络拓扑的核心是Router1,它通过配置多个VLAN子接口来实现对不同VLAN的支持,并通过NAT进行地址转换,使得内部网络能够与外部网络进行通信。Router1上配置了FastEthernet0/0.x接口,并启用了802.1Q封装,…

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络(Generative Adversarial Networks, GANs)是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分:生成器(Generator)和判别器(Discriminator)…

【数学建模美赛速成系列】O奖论文绘图复现代码

文章目录 引言折线图 带误差棒得折线图单个带误差棒得折线图立体饼图完整复现代码 引言 美赛的绘图是非常重要得,这篇文章给大家分享我自己复现2024年美赛O奖优秀论文得代码,基于Matalab来实现,可以直接运行出图。 折线图 % MATLAB 官方整理…

兼职全职招聘系统架构与功能分析

2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任&#xff…

svn tag

一般发布版本前,需要在svn上打个tag。步骤如下: 1、空白处右击,选择TortoiseSVN->Branch/tag; 2、填写To path,即tag的路基以及tag命名(一般用版本号来命名);填写tag信息;勾选cr…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(七)

文章目录 一、题库管理模块实现1、新增题目功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、题目列表功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询题目列表接口实现2.3.2 后端编辑试题接口实现2.4 效果展示二、代码下载一、题库管…

【Cesium入门教程】第一课:Cesium简介与快速入门详细教程

Cesium概述 Cesium是一个基于JavaScript开发的WebGL三维地球和地图可视化库。 它利用了现代Web技术,如HTML5、WebGL和WebAssembly,来提供跨平台和跨浏览器的三维地理空间数据可视化。 Cesium的主要特点包括: 跨平台、跨浏览器&#xff1a…

Unity中实现伤害跳字效果(简单好抄)

第一步骤安装并导入Dotween插件(也可以不用导入之后直接下载我的安装包) 官网DOTween - 下载 第二步: 制作跳字预制体 建议把最佳适应打开,这样就不怕数字太大显示不全了。 第三步:创建一个空对象并编写脚本JumpNumbe…

AI与低代码发展下的程序员就业展望:经济环境对就业市场的影响

AI与低代码发展下的程序员就业展望:经济环境对就业市场的影响 随着人工智能(AI)技术的不断进步和低代码平台的日益成熟,软件开发行业正在经历一场深刻的变革。与此同时,全球经济环境的变化也对程序员的就业市场产生了…

复古怀旧美感35mm胶片模拟色调颗粒汽车商业摄影Lightroom调色预设 Mike Crawat 2024 35MM FILM LOOK PRESETS

10个电脑端手机端35mm胶片模拟汽车摄影风光人像扫街LR预设 Mike Crawat 2024 35MM FILM LOOK PRESETS 这个精心制作的 10 个预设集合旨在为您的数码照片提供 35 毫米胶片的丰富、怀旧美感。每个预设都复制了标志性胶片的独特色调、颗粒和颜色配置文件,让您只需单击…

Hadoop 和 Spark 的内存管理机制分析

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

Linux容器(初学了解)

目录 一、容器 1.1、容器技术 1.2、容器和虚拟机之间的差异 1.3、Rootless 和 Rootful 容器 1.4、设计基于容器的架构 1.5、容器管理工具 1.6、容器镜像和注册表 1.7、配置容器注册表 1.8、使用容器文件构建容器镜像 二、部署容器 2.1、Podman 实用程序 2.2、安装容…