还在用明文存储密码吗?快来了解一下加密吧

news2025/2/6 12:02:20

目录

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

二. MD5到底是什么?

2.1 MD5概述

 2.2 MD5为什么不是加密算法?

2.3  MD5主要特点MD5

2.4  MD5的性质

2.5 为什么用MD5存储密码不好

三.  给密码加盐再落库,增加破解成本

四. BCrypt算法加密解密

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


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

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

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

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

        所以,我们做网站的话不能直接明文存储密码,需要对用户的明文密码进行一个加密处理。 


二. MD5到底是什么?

2.1 MD5概述

        MD5,全称应该为Message Digest Algorithm 5(中文名为消息摘要算法第五版),属于Hash算法的一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。

        MD5是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

 2.2 MD5为什么不是加密算法?

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

  • 加密算法指的是把一段数据加密后,可以解密;
  • 很明显MD5无法解密,只能暴力穷举破解,所以它不算是加密算法;

2.3  MD5主要特点MD5

        不可逆,相同数据的肯定一样,不同数据的MD5值肯定不一样(一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个)

比如:主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4*10^38,这个数字是有限多个的,而但是世界上可以被用来加密的原文则会有无数的可能性

2.4  MD5的性质

  1. 压缩性:任何长度的数据,算出的MD5值的长度都是固定的(相当于超损压缩);
  2. 容易计算:从原数据计算出MD5值很容易;
  3. 抗修改性:对原数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都有很大区别;
  4. 弱抗碰撞:已知原数据和其MD5值,想找一个具有相同MD5值的数据(即伪造数据)是非常困难的;
  5. 强对抗性:想找到两个不同的数据,使它们具有相同的MD5,是非常困难的;

2.5 为什么用MD5存储密码不好

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

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

  • 彩虹表:适用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列,如下所示:

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


三.  给密码加盐再落库,增加破解成本

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

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

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

比如: 

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

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

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

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

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

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

         其实加盐的操作还有其他各种方案,比如 不加字段也不用分隔符,把用户创建时间进行处理作为动态盐,等等……

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

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

总而言之: 

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

        如果我们仅仅是用MD5处理密码存储,那么这些破解其实成本也不是很大,毕竟目前网上已经有某些MD5破解网站,专门用来查询MD5。

        曾经网上有一个结论:MD5来存储6位数长度的密码(仅仅包含小写和数字),只需要40秒,就可以穷举所有密码。

        当然,只要你的盐足够长足够乱,得到的MD5码就更难查到。


四. BCrypt算法加密解密

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

        MD5 计算只需要1微秒,而 BCrypt 需要 0.3 秒,速度就差了30万倍,毕竟 1 秒 = 1000000 微秒 !

        因此,如果本来彩虹破解 MD5 需要40 秒就能破解的话,换成 Bcrypt 后就变成了138天才能破解! 

        这是因为 Bcrypt 单向hash加密算法,一般用于密码加密,它有个迭代次数,可以使计算变慢。相对来说,Bcrypt 比 MD5 更安全,但 MD5 加密会更快速。

        MD5是一种可反向破解的密码加密,如果你的密文被截获它就可以在 MD5 在线解密破解得到密码,然后就可以根据你的账户密码登录账号。而 Bcrypt 类似 Pdkdf2 算法,不可反向破解生成明文(不可逆加密),所以及时黑客截获到密文也无法转换成明文(Bcrypt不支持反运算,只支持密码校验)。

        虽然不能转换成明文密码,但是它还是会被彩虹破解,只是相对于破解时间成本更大一些。

 Bcrypt四个变量:

  1. saltRounds:正数,代表hash杂凑次数,数值越高越安全,默认10次;
  2. myPassword:明文密码字符串;
  3. salt::盐,一个128bits随机字符串,22字符;
  4. myHash:经过明文密码password和盐salt进行hash,个人的理解是默认10次下 ,循环加盐hash10次,得到myHash;

        每次明文字符串myPassword过来,就通过10次循环加盐salt加密后得到myHash, 然后拼接BCrypt版本号+salt盐+myHash等到最终的bcrypt密码 ,存入数据库中。
        这样同一个密码,每次登录都可以根据自省业务需要生成不同的myHash, myHash中包含了版本和salt,存入数据库。


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

        我们一直说加密加密,其实我们还有一种防破解的方式,就是使用加密算法。比如采用对称加密 AES ,这样只要密钥不泄露,攻击者拖库拿到密码也完全破解不了!!!

        但是反过来想,加入密钥被泄露了,那我们的加密就相当于无,白给了,比破解上述的hash(密码+盐)更轻松,连试错的机会都不需要了!

        所以一旦使用加密存储的话,就得看你的密钥能不能保住不泄露了!!!  

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

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

相关文章

零入门容器云网络-8:网络虚拟设备之tun设备介绍

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

SpringCloud(8)— 使用ElasticSearch(RestClient)

SpringCloud(8)— 使用ElasticSearch(RestClient) 一 认识RestClient ES 官方提供了各种语言的客户端用来操作ES,这些客户端的本质就是组创DSL语句,通过 Http 请求发送给ES 官方文档地址:Elasticsearch Clients | E…

运维基础(上部)

运维基础【(上部)】 因为笔记所记内容太多,所以我分成了上下两部分来分享给大家查看学习!同时我会持续更新博客发布更加优质的文章,希望大家多多支持与关注!感谢! 一、运维概述 1、运维岗位的收…

[附源码]计算机毕业设计Python港口集团仓库管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

GitLab Runner的使用

一、初次使用GitLab Runner 特别说明:前面已经将本地项目成功推送到了GitLab中,并且已经注册了一个GitLab Runner,接下来就是使用GitLab Runner。 触发GitLab Runner以完成GitLab的CI(持续集成)/CD(持续部署),需满足下述两个条件: 仓库根目录下面存在有.gitlab-ci.yml文…

[ Linux ] 互斥量实现原理,线程安全

上篇文章我们对抢票系统做了加锁处理,对互斥量tickets进行加锁。而本篇博文来谈谈互斥量实现的原理以及相关问题。 目录 1.上篇遗留问题 我们在临界资源对应的临界区中加锁了,就不是多行代码了吗?如果还是多行代码,难道不会被切…

[附源码]计算机毕业设计Python公益组织登记与查询系统论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

【AI with ML】第 13 章 :在 Android 应用程序中使用 TensorFlow Lite

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

vue的虚拟DOM和diff算法

虚拟DOM和diff算法密不可分, 虚拟dom,它本身就是一个 JavaScript 对象,为解决DOM操作非常耗时,把DOM转换为虚拟DOM,DOM操作转换为js计算,js执行速度较快。 diff算法在vue中被优化为O(n)的时间复杂度&#x…

手机损坏的数据导出方法

主板损坏的症状 手机主板损坏的症状表现一般为系统启动失败、屏幕无显示、启动黑屏死机、无法开机、没有声音、无法打电话、没网络等等。 资料的重要性 手机坏了,怎么把手机里面重要的资料导出来?今天小编就来跟大家说说手机导资料这个事。 手机坏了,具体要看手机是哪里…

java计算机毕业设计ssm基于JavaWeb的公务员招考信息发布平台

项目介绍 随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,各种管理系统层出不穷。公务员是各国负责统筹管理经济社会秩序和国家公共资源,维护国家法律规定,贯彻执行相关义务的公职人员。每年报考公务员的人数逐渐增加,特为此…

寒假训练营 第一节 时空复杂度分析

一.时空复杂度的分析 1.时间复杂度 时间复杂度&#xff1a;程序运行会消耗多少时间。 在此&#xff0c;为了方便讨论&#xff0c;我们假定每一个语句消耗的时间一样&#xff0c;视为一个时间单元。 #include <iostream> using namespace std; int main() {int n 100;…

国企的设备管理工作如何做好?

国企的设备管理工作如何做好&#xff1f; 在市场经济建设持续深化、经营体制不断转变的过程中&#xff0c;一些企业设备管理工作发生了很大的变化&#xff0c;出现整体水平下降&#xff0c;设备技术状况恶化等现象&#xff0c;这在一定程度上制约了企业技术创新&#xff0c;制…

Transformer实现以及Pytorch源码解读(二)-embedding源码分析

前言 本部分博客需要先阅读博客&#xff1a;《Transformer实现以及Pytorch源码解读&#xff08;一&#xff09;-数据输入篇》 作为知识储备。 Embedding使用方式 如下面的代码中所示&#xff0c;embedding一般是先实例化nn.Embedding(vocab_size, embedding_dim)。实例化的过…

业务安全情报,预知发现黑灰产的企业攻击

业务遭遇欺诈风险&#xff0c;发起攻击的黑灰产主要是为了谋取利益。对于黑灰产利益目的甄别需要多方面情报&#xff0c;再辅助技术和专家经验&#xff0c;然后进行综合判断&#xff0c;进而帮助企业及时响应、精准布控。 安全情报帮助企业提前发现攻击 12月13日&#xff0c;“…

谁代表先进生产力?

互联网企业代表先进生产力方向 做软件项目的时候碰到三类企业 1、 传统企业&#xff0c;以卖货或卖服务为主 2、 互联网类&#xff0c;做个服务工具或平台 3、 分配模式类&#xff0c;以某分配模式为“宝贝” 毫无疑问&#xff1a; 互联网企业代表先进的生产力方向 互联网类…

即时通讯音视频开发之音频基础及编码原理

即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。 比特率&#xff1a; 表示经过编码&#xff08;压缩&am…

C#读取Excel文件内容(WPS)

本地安装的WPS版本为 一、下载accessdatabaseengine_X64后安装 网址&#xff1a;https://www.microsoft.com/en-us/download/details.aspx?id54920 二、项目中引用OleDb包 三、代码部分 //excelFilePath为文件路径&#xff08;例如D:\Test.xslx&#xff09; > //strin…

Android---RecyclerView回收复用机制

一、RecyclerView回收复用 回收什么&#xff1f;复用什么&#xff1f; 回收&#xff1a;回收即缓存。当屏幕上的一个itemView滑出屏幕(即不可见了)&#xff0c;RecyclerView就利用回收机制&#xff0c;将该itemView放入内存。当其它itemView出现时&#xff0c;不用每次都去new…

JavaScript-Sass

Sass的基础使用 1.简介 1.1简介 Sass是世界上最成熟&#xff0c;最稳定&#xff0c;最强大的CSS扩展语言Sass是css预编译工具可以更加优雅的书写csssass写出来的东西浏览器不认识需要进行转换VSCode推荐使用Easy Sass插件Sass中可以使用加减乘除&#xff0c;条件分支以及循环…