密码管理的艺术:数据库存储密码的策略、技术和工具

news/2024/5/2 13:10:58/文章来源:https://blog.csdn.net/m0_70952941/article/details/133856530

最近接手公司一个之前的服务,竟然发现用户密码是明文存储在数据库中!

说实话还是有点吃惊的,这可不兴学 CSDN 呀,至少也得搞个 MD5 存一存吧。

不过 MD5 其实也没啥用,今天我们就来盘盘密码这种敏感信息该如何存储。

数据库为什么不能明文存储密码

不仅仅是为了防止系统管理员或者DBA等公司人员获得用户的密码,也是防止被黑客拖库产生更大的信息泄露。

如果黑客通过不法手段获取了服务的数据库存储信息,盗取里面的内容,从而直接获得明文密码,那么影响就会很大。

f8e32d8944d0a3173d9969a9450af8a3.jpeg

因为绝大部分人所有账户的密码都会设置成一样的,只要知道一个网站的明文密码后,基本上等于搞定这个用户其他网站的所有账号,也就是撞库。

所以不能明文存储密码,需要加密下。

MD5 不是加密算法

实际上,经常有人会说拿 MD5 加密,这样说没问题,但是我们心里要清楚 MD5 压根就不是加密算法,它其实就是个摘要算法。

加密算法指的是把一段数据加密后,可以解密。

很明显 MD5 无法解密,只能暴力穷举破解,所以它不算是加密算法。

为什么用 MD5 存储密码不好

大部分人的密码都会设置得比较简单,比如名字缩写加个出生日期这种。

而黑客其实会针对常见的一些密码,生成彩虹表。

彩虹表:是用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列(维基百科)

就像下面的表格:

234c27562daa7f007cf7001ec478fa18.jpeg

这样一来只要准备得足够充分,彩虹表足够大,那么直接对比彩虹表就能反推得出明文密码,所以直接简单用 MD5 也是不安全。

给密码加点盐

那咋办么?

其实彩虹表大部分能找到的只是常见的密码。

基于这点,我们虽然不能强迫用户设置一些非常复杂的密码(这记忆成本太高)。

但是我们可以手动给用户的密码拼接上一些复杂的字符,然后经过哈希函数处理之后落库。

比如用户初始密码是123456,我们可以给他的密码加点盐,盐其实就是一些复杂的字符数字,比如:

23b7ed2f83fd38c081b2c4cd7a56c806.jpeg

这样即使不法分子盗取到密码,预先准备的彩虹表(因为密码变得不常见了)也无用,使得破解的成本变高。

这种盐叫固态盐,不需要落库存储,一般在代码或者配置中保存。一旦被不法分子试出这个的盐,那么继而就能通过这个盐试出别的密码。

所以推荐动态盐,即让每个账号下密码加的盐都是不一样的,这样一来不法分子的破解成本就更高了。

d27c33b33b4fe925ccaba1edfb20c265.jpeg

动态盐需要分别为每个用户记录对应密码加的盐值,一般是落库存储,比如上图所示在用户表上加个 salt 字段。

又或者直接跟密码拼一起中间用特殊符号切分等等,比如下图用 $ 来分割。(没错动态盐是直接存储的,也就是说攻击者可以拿到每个账号的盐)。

b50f092e15bbd3183e34bb7a099c6a06.jpeg

我还看过一些方案,比如不加字段也不用分隔符,把用户的创建时间进行处理作为动态盐,等等。

加盐这种手段仅仅只是增加了攻击者的破解成本,因为攻击者知道盐值,从而就能反推出一个值,使得这个md5(值+盐) = md5(密码+盐)。

c7607bf94ab186ebf0b6514708081359.jpeg

因为不论这个值是否等于密码,反正只要最终 hash 的结果是一样的,就都能登录,所以攻击者要推是可以推出来的,只不过成本会高些。

总而言之,通过摘要算法来存储密码,不法分子是可以通过暴力、彩虹表、字典等方式来破解。

如果你仅仅是用 md5 处理密码存储,那么这些破解其实成本也不是很大,咋一说你可能没啥感觉,我在网上看到一个结论:md5 来存储 6 位长度的密码(仅仅包含小写和数字),只需要 40 秒,就可以穷举所有密码。

bcrypt

因此,为了进一步给黑客们增加破解成本,需要替换 md5 这类 hash 快速的方法,换成 bcrypt 这种算法。

md5 计算只需要 1 微妙,而 bcrypt 需要 0.3 秒,速度差了 30 万倍。

1秒=1000000 微秒

因此,如果本来 40 秒就能破解的话,换成 bcrypt 后变成 138 天才能破解!

bcrypt 就是这么个哈希算法,它有个迭代次数,可以使得计算变慢,非常适合这种场景!

不用摘要算法,加密存储行吗?

其实还有一种防破解的方式,就是采用加密算法。

比如采用对称加密 AES,这样只要密钥不泄露,攻击者拖库拿到密码也完全破解不了!

但是反过来想,假设密钥被泄漏了,那就是白给,比破解上述的hash(密码+盐)更轻松,连试试都不需要。

所以加密存储的话就得看你的密钥保不保得住了。

最后

大致方案就这么几种。动态盐其实已经 OK 了,不过算法尽量别用 md5,可以用 sha1、sha256 这些,因为 md5 其实已经被破解了。

这里的破解不是说通过 md5 可以反向推出明文,而是利用 md5 hash 后的值能快速的找到另一个值使得 md5 的结果一致。


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

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

相关文章

Goland Cannot use ‘err‘ (type error) as the type any

问题描述: 用Goland写代码的时候,使用panic总是报错,官方用法也是报错,最后找到官方回复的链接,https://youtrack.jetbrains.com/issue/GO-12179/Cannot-use-err-type-error-as-the-type-any 问题解决方式&#xff1…

便利店小程序可以做哪些营销活动呢

在当今这个数字化时代,微信小程序已经成为了人们日常生活的一部分。对于便利店来说,拥有一个优秀的小程序不仅可以提高销售,还可以扩大品牌影响力,增加客户粘性。本文将探讨便利店小程序可以做什么样的营销活动,如何利…

Redis 排障:你永远不知道告警和下班,谁先到来?

01 第一个重点,服务排障的基本方法 在岁月静好的一天,正当笔者准备下班工作的时候,突然,告警出现了! 嗯,又是一到下班就会告警! 仔细一看,原来是数据整体处理时间的慢了。 既然慢了…

2023年全球新能源云母材料市场发展展望分析:储能云母市场规模快速增长[图]

云母作为电气设备的基础材料,下游应用领域涉及高温冶炼、电力等传统行业,并在近几年逐步扩展到新能源汽车、电化学储能等新兴行业。2022年,全球云母材料市场规模保持稳定增长至180.0亿元,期间年复合增长率约为13.2%。预计未来&…

【Hello Algorithm】暴力递归到动态规划(三)

暴力递归到动态规划(三) 最长公共子序列递归版本动态规划 最长回文串子序列方法一方法二递归版本动态规划 象棋问题递归版本动态规划 咖啡机问题递归版本动态规划 最长公共子序列 这是leetcode上的一道原题 题目连接如下 最长公共子序列 题目描述如下…

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程(超详细)

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程 文章目录 NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程前言Serial Plotter测试前期准备打开工具方法 1方法 2 测试代码 总结 前言 在嵌入式的开发过程中,我们经常会采集一些传感器的数据&#xff0c…

iCloud涨价不用慌!学会使用群晖生态将本地SSD“上云”

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是想使用群晖生态软件,就必须要在服务端安装群晖系统,具体如何安装群晖虚拟机请参考: 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

本地PHP搭建简单Imagewheel私人云图床,在外远程访问

🔥博客主页: 小羊失眠啦 🔖系列专栏: C语言、Linux 🌥️每日语录:追逐影子的人,自己就是影子。 ❤️感谢大家点赞👍收藏⭐评论✍️ 1.前言 云存储在前几年风头无两,云存…

uniapp安卓 华为商店 vivo商店 oppo 小米 上架问题 Android中怎么才能不提前申请权限

问题描述 提交 小米 oppo 市场审核失败,原因是提前向用户申请开启通讯录、定位、短信、录音、相机和日历等权限。 解决方案: 是否有使用 READ_PHONE_STATE 权限,如果有使用 oaid 代替;是否有使用第三方 SDK,如果有关…

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条,但是想要在​​.lever​​元素中单独开启滚动条的样式,你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例,展示如何给​​.lever​​单独开启…

什么是实验室超声消泡机?工作原理是怎样的?

超声波消泡设备也叫超声波脱气机、超声波消泡机、超声波消泡器。超声波在液体中产生空化作用,使得液体中溶解的气体(如:空气)不断凝聚,成为很细小的气泡,最后成为球状气泡脱离液体表面,从而达到液体脱气、液体消泡的目的。 实验室超声消泡机工作原理: …

13年测试老鸟,性能测试内存泄露——案例分析(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、环境配置 1&a…

第二证券:国际油价大幅上涨 后市恐难持续走高

上个买卖周,受巴以冲突影响,原油商场成为各方关注的焦点。到上星期五收盘,布伦特原油周内涨幅达7%以上,为本年2月以来最大周涨幅,WTI原油周内累计上涨近6%。业内人士认为,其时地缘要素是导致油价出现异动的…

systemverilog/uvm的 blog https://www.amiq.com/consulting/blog/

有很多systemverilog/uvm的 blog https://www.amiq.com/consulting/blog/

字符串排序程序

字符串排序程序,对一个字符串中的数值进行从小到大的排序 例如排序前给定的字符串为" 20 78 9 -7 88 36 29" 排序后: -7 9 20 29 36 78 88 要求使用包装类对数值类型的字符串转换成整型进行排序。 public class StringSort {public static vo…

SpringBoot学习日记

Spring程序与SpringBoot程序对比 SpringBoot程序优点 起步依赖(简化依赖配置)自动装配(简化常用工程相关配置)辅助功能(内置服务器,......) 内嵌Tomcat REST风格 REST简介 REST,表…

.Net Core 6 运行环境手动安装流程

安装.NET Core 6 概述 在开始之前,我们首先需要了解一下整个安装过程的流程。下面的表格将展示安装.NET Core 6的步骤以及每一步需要做的事情。 步骤 动作 说明 1 下载.NET Core 6 SDK 从官方网站下载.NET Core 6 SDK安装包 2 安装.NET Core 6 SDK …

山西电力市场日前价格预测【2023-10-16】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-16)山西电力市场全天平均日前电价为356.38元/MWh。其中,最高日前电价为502.82元/MWh,预计出现在18: 30。最低日前电价为224.63元/MWh,预计…

长沙上市公司董秘联谊会,来啦!

上市公司的数量,是判断一座城市经济实力的重要指标。 在当前复杂的竞争环境中,提升上市公司的数量和质量,以产业思维促进城市内外的上市公司合作交流,是城市提升经济综合实力的有效举措。 10月13日,在由长沙市委统战…

享搭低代码平台:加速企业应用开发,轻松搭建表单和报表

在当今快节奏的商业环境中,企业需要快速响应市场需求并提供高效的解决方案。然而,传统的应用开发过程繁琐、耗时,并且需要专业的编程技能。为了解决这些问题,享搭低代码平台应运而生。本文将详细介绍享搭低代码平台的特点和优势&a…