为什么忘记密码要重置密码而不是直接告诉你密码?

上一篇博客:LeetCode 2529. 正整数和负整数的最大计数

 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

简介

 今天看到了一个挺有意思的面试题:为什么忘记密码要重置密码而不是直接告诉你密码? 不知道大家在重置密码的时候有没有想过这个问题。回答这个问题其实就一句话:因为服务端也不知道你的原密码是什么。

密码的存储方式

 我们注册用户之后用户信息会被存储到服务端的数据库中,但是这个密码不是直接以明文的方式存储的,如果以明文的方式存储那就是严重的安全风险问题了。密码基本都是通过哈希算法来加密密码并保存的,例如经常使用的 MD5 加密方式。

当我们注册用户时输入明文密码之后上传到服务器,服务器会使用加密算法将你的明文密码进行加密再存储到数据库中。而且这个加密一般是不可逆的,即只能通过明文加密到密文,但是不能将密文解密为明文。等用户登录的时候会再次将用户输入的明文密码进行加密与数据库中的密码进行比对。当我们忘记密码的时候服务端也不知道你的密码是什么,所以只能让用户重置密码,而不是直接告诉用户密码。


MD5加密的缺陷

MD5 理论上是不可逆的,所以从理论上来说这个加密后的代码是不可解析的。但是 MD5 有个比较严重的问题就是:同样的字符串加密之后会得到同样的结果。这也就意味着:E10ADC3949BA59ABBE56E057F20F883E 代表的永远都会是 123456。所以,如果有一个很大的 md5 密码库,那么理论上就可以解析出所有的 md5 加密后的字符串。如下图一样,我们可以拿到MD5加密后的字符串进行“解密”:
在这里插入图片描述

如何使密码更安全

 为了增加破解难度,通常可以选择加盐。盐(Salt)在密码学中,是指通过在密码任意固定位置插入特定的字符串,让哈希后的结果和使用原始密码的哈希结果不相符,这种过程称之为“加盐”。例如 MD5 + 加盐。这里使用Spring框架提供DigestUtils工具类对123456进行加盐操作并去上面的网站去实验一下看看能不能“解密”。代码如下:

import org.junit.Test;
import org.springframework.util.DigestUtils;

public class Md5Test {

    @Test
    public void md5Test() {
        String password = "123456";
        String salt = "BA59ABBE56";
        System.out.println(DigestUtils.md5DigestAsHex((password + salt).getBytes()));
        // 加密之后的结果为:012df1a669b598d67ec70e761d47c8fd
    }
}

在这里插入图片描述

 但是要注意加盐只是增加了破解密码的难度,并不代表密码无法被破解。想要密码更安全可以使用安全性更高的加密算法,例如 密钥派生算法(Key Derivation Function,简称 KDF,也称为密码哈希算法)。相比其他加密哈希算法,KDF 具有一个独特属性——计算速度很慢,而且从设计上就使其计算速度难以提升,所以 KDF 也被称为 慢哈希算法

常见的KDF算法

常见的 KDF 算法主要有(安全程度依次递增):

  1. PBKDF2:其核心是对 HMAC 进行多次迭代以增加破解难度。Bcrypt 对内存的要求较低,并不能抵抗密码破解硬件(如 GPU、ASIC、FPGA)攻击。这个 KDF 算法比较老了,目前已经不推荐使用。

  2. Bcrypt:一种基于 Blowfish 加密算法的密码哈希算法,专门为密码加密而设计,安全性高于 PBKDF2。Bcrypt 对内存的要求较低,同样不能抵抗密码破解硬件攻击。
    Scrypt:相比于 PBKDF2 和 Bcrypt,其占用的内存更多,安全性也要更高。它还可以通过调整内存和 CPU 的使用量来增加破解的难度。

  3. Argon2:目前最强的密码 Hash 算法,在 2015 年赢得了密码 Hash 竞赛。和 Scrypt 一样,Argon2 同样需要大量的内存。二者综合使用加盐、多次迭代、大量消耗 CPU 时间和内存资源等手段,大大提升了对抗密码破解硬件的能力。
    Spring Security 提供了这些 KDF 算法的实现。


参考资料:

  1. 面试官:为什么忘记密码要重置而不是告诉你原密码?
  2. 求你了,别再用 MD5 加密了!

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

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

相关文章

Tensorflow(GPU版本配置)一步到位!!!

Tensorflow(GPU版本配置)一步到位!!! CUDA安装CUDA配置Tensorflow配置常见的包 CUDA安装 配置了N次的Tensorflow–Gpu版本,完成了踩坑,这里以配置Tensorflow_gpu 2.6.0为例子进行安装 以下为ten…

React + three.js 3D模型面部表情控制

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 示例项目(github):https://github.com/couchette/simple-react-three-facial-expression-demo 示例项目(gitcode)&#xff…

Linux网络名称空间和cgroup的关系

在Linux系统中,网络名称空间(Network Namespaces)和控制组(cgroups)是两种重要的资源管理和隔离技术。虽然它们在功能和应用场景上有所不同,但二者共同为Linux容器技术,如Docker和Kubernetes&am…

编程规范(保姆级教程)

文章目录 为什么需要编程规范?💡代码检测工具 ESLint💡代码格式化 Prettier💡ESLint 与 Prettier 配合解决代码格式问题eslint支持ts约定式提交规范Commitizen助你规范化提交代码什么是 Git Hooks使用 husky commitlint 检查提交…

wsl初步使用记录

wsl介绍 WSL是windows平台下Linux环境的子系统(Windows Subsyetem for Linux),可以让Windows下方便的安装Linux系统,而无需安装其他虚拟机软件。 wsl使用 Windows操作系统支持 Windows 10 版本 2004 及更高版本(内…

OpenHarmony南向开发案例:【智能保险柜】

样例简介 智能保险柜实时监测保险柜中振动传感器,当有振动产生时及时向用户发出警报。在连接网络后,配合数字管家应用,用户可以远程接收智能保险柜的报警信息。后续可扩展摄像头等设备,实现对危险及时报警,及时处理&a…

缝合的作品(并查集/逆序)

、思路:首先是并查集来做,首先给给每个单词一个id,然后把它放到ans[i]处。 对于操作1:把a单词换为单词b,就相当于a、b两个集合结合。然后再给a单词赋一个新的id,用来进行操作2,因为之后的操作2…

HarmonyOS实战开发-证书管理、如何实现对签名数据进行校验功能。

介绍 本示例使用了ohos.security.certManager相关接口实现了对签名数据进行校验的功能。 实现场景如下: 1)使用正确的原始数据和签名数据进行签名校验场景:模拟服务端对签名数据进行校验,验证客户端身份和原始数据完整性。 2&…

车载摄像头图像及画质增强解决方案

车载摄像头作为汽车智能化、安全化的关键组件,其图像质量直接影响着驾驶者的视觉感知和行车安全。美摄科技凭借其在图像处理和AI算法领域的深厚积累,推出了一款专为车载摄像头打造的图像及画质增强解决方案,助力企业实现摄像头画面的实时优化…

基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…

电商技术揭秘十九:电商平台的智能化与自动化技术

相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台…

✔ ★Java项目——设计一个消息队列(二)

Java项目——设计一个消息队列 四. 项⽬创建五. 创建核⼼类创建 Exchange(名字、类型、持久化)创建 MSGQueue(名字、持久化、独占标识)创建 Binding(交换机名字、队列名字、bindingKey用于与routingKey匹配&#xff09…

WPS的JS宏如何批量实现文字的超链接

表格中需要对文字进行超链接,每个链接指引到不同的地址。例如: 实现如下表格中,文件名称超级链接到对应的文件路径上,点击对应的文件名称,即可打开对应的文件。 序号文件名称文件路径1变更申请与处理表.xls文档\系统…

HTTPS证书是什么?申请方法是什么?

HTTPS证书是互联网上由权威证书颁发机构(CA)签发的数字文件,用于证明网站的身份,并通过其中包含的公钥为网站启用HTTPS加密连接,确保用户与网站间的通信数据安全且不可被第三方窃取或篡改。 怎么申请? 一&…

实验案例一:交换机的初始配置

1、实验环境 实验用具包括一台 Cisco 交换机,一台 PC,一根 Console 线缆。 2、需求描述 如图 5.17 所示,实验案例一的配置需求如下。 通过 PC 连接并配置一台 Cisco 交换机在交换机的各个配置模式之间切换将交换机主机的名称改为 BDON 3、…

文心一言 VS 讯飞星火 VS chatgpt (234)-- 算法导论17.2 2题

二、用核算法重做练习17.1-3。练习17.1-3的内容是:假定我们对一个数据结构执行一个由 n 个操作组成的操作序列,当 i 严格为 2 的幂时第 i 个操作的代价为 i ,否则代价为1。使用聚合分析确定每个操作的摊还代价。 文心一言: 练习…

多线程的学习

多线程编辑: 可以简单理解进程是一个软件 而线程就是一个软件中多个可以同时运行的功能 实现多线程的第一种方式:使用Thead类我们再自己创造一个类继承于这个类我们在对Thead方法进行重写,注意我们再重写的时候一定要加上Override这行 我犯下…

19 文件接口

文件概念 文件指的是文件内容属性,对文件的操作无外乎就是对内容或者属性的操作 为什么平时不用文件接口 我们运行程序访问文件,本质是进程在访问文件,向硬件写入内容,只有操作系统有这个权限。普通用户想写入内容呢&#xff1…

【canvas】canvas基础使用(六):图形阴影

简言 学习使用canvas的阴影属性。 阴影 shadowBlur 阴影模糊 CanvasRenderingContext2D.shadowBlur 是 Canvas 2D API 描述模糊效果程度的属性;它既不对应像素值也不受当前转换矩阵的影响。默认值是 0。 语法: ctx.shadowBlur level; 选项值&#x…

【寒假集训营总结笔记——7道优质好题】

牛客寒假集训营总结笔记——7道优质好题 一、Trie树的应用: 题目链接:Tokitsukaze and Min-Max XOR 1、题意 2、题解 1、首先这道题的答案和元素本身的顺序是无关的,因为假如你选择了一些数字,它是默认必须排好序才能记作是答案…