网站首页 > 技术文章 正文
想不到一句”MD5加密“,竟然惨遭大量程序员的嘲笑!很多人给我普及MD5相关的知识,甚至有恶语相向的,我感觉整个人都不好了!所以,针对“MD5加密”这件事情,我们再讨论讨论,另外,还有几个针对MD5大家讨论得比较热闹的问题,看看我是怎么理解的。
首先,为什么我会说“MD5加密”,我当然知道MD5是哈希(HASH)算法,MD5本身并不是用来做加密运算的,而是用来创建数据快照或签名的,当然,您可以说它有任何作用,毕竟,代码是死的,人是活的,我们不可能被一个代码算法的定义憋死。
“MD5加密”只是一种通俗的叫法,当然叫法有很多,比如说“MD5哈希”、“MD5混淆”、“MD5签名”等等,“DM5加密”只是我喜欢叫的一种方式,但这么叫的不止我一个人,并不是因为我认为MD5是加密算法,而是当沟通变多了,“MD5加密”是更加通俗易懂的叫法而已,至少在我过去的工作经历中,“MD5加密”、“MD5验签”是最常用的两种叫法,其他叫法会存在沟通困难的情况!
很多人盯着我说“MD5加密”这个叫法很Low,因为MD5压根就不是用来加密的,能加密就说明能解密,还举了各种例子,比如说一个几十G的视频,在MD5加密后(请容许我这么叫),只留下了16位或者32位的HASH值,这种情况压根无法逆向解密。
这种说法我也认可,但我认为太强迫症了!
前面说了,“MD5加密”只是一种叫法罢了,程序员互相之间沟通没有问题就行,如果在日常工作中,程序员互相沟通,当您说到“MD5加密”,别的程序员说:“MD5不是加密,是签名、是HASH!”,类似的沟通如果是这样,您猜结果是咋样的吧!
很多人认为我说“MD5加密”比较Low,但如果您看过一些大公司,甚至是头部公司提供的官方接口SDK源码的注释,您就知道,那些大公司的程序员也是这么叫的!
下图中举了三个例子!
至少人家互联网大厂没觉得称呼“MD5加密”比较Low,我又算啥!
这里我觉得我讲明白了,一些号称专家的,就不需要给我普及相关知识了!
还有一个大家比较关心的话题,那就是MD5到底是用来干嘛的!有些人说用来验签,有些人说是用来做索引。
每个公司的使用场景都不一样,其中,讨论最多的就是MD5到底能不能用来给密码加密。
没办法,您不得不承认,还有大量的公司拿MD5用来保存密码的HASH值!所以,此时说MD5是用来加密的,倒也贴切!
您如果说:“叫加密就是为了能解密,而MD5不能不能逆向解密,所以不能叫解密!”,那我就真拿您没办法了!
至少我过去接触的很多密码加密解决方案用得都是MD5,到现在拿到一些开放平台的SDK中,密码加密还是使用的MD5,只不过会对MD5进行加盐!
做法一般是通过用户ID或者其他一些标识按照指定顺序先转成Base64形式,然后再进行MD5或者HMAC进行“加密”(注意啦,加引号啦!)。
下图中,基本上都是用的这种方法!
但还是需要解释一下,通过这些方法形成的16位或者32位的byte值并不是我们所认为的“密文”,而是哈希值!
前端传入的数据也会进行相同的处理,然后跟数据库存储的哈希值进行比较,而不是想象中后端会先解密,再比较!
至于大家所说的,MD5可以使用彩虹表等方式暴力破解,其实也很好解决,最常用的方法就是加盐!
但如果直接MD5那就一定不安全吗?那只是数据层面不安全,如果别人拿到了数据库,那么就可以直接对数据库里面的MD5的HASH值进行暴力破解。
这个的确是的,但别人得拿到你的数据库才行,如果单纯从接口层面,其实应对方案还是挺多的!
比如说大家都比较常见的方案就是密码连续输入错误3次就锁定登录,异地登录需要短信验证等等,都可以避免使用MD5对密码进行暴力破解。
因为MD5的暴力破解原理很简单,其实就是碰,只要密码不是那种“123456”这种简单的形式,以上两种限制已经足够能够应对MD5的暴力破解了!
有人会说:“万一别人一次成功呢?”
呃...,的确有这种可能吧!那可以要求用户密码不能过于简单这个方式解决!
说到这里,我觉得我已经说得很清楚了,如果您还执意说:“我需要纠正你,MD5不是加密算法!”,那我只能求放过了!
最后,借用一个网友提问我的问题,这位网友是这么说的:“如果MD5被用作密码加密,且这种加密是不可逆的,那么你怎么解释有些网站在修改密码时,输入密码时会提示‘新密码和旧密码相似度太高!’”。
我的想法是,在用户注册账号密码时,密码先会被整体HASH,然后,再将密码按照指定规则进行拆分,拆分的部分再进行HASH,然后将拆分出来的HASH值再单独存储,在修改时,再按照拆分规则对新密码的拆分HASH跟旧密码的拆分HASH进行比对,设置一个相似比例,超过相似比例再报相似度太高的提醒就可以了。
不知道,您认为这种解决办法可行吗?或者您认为还有什么解决方案呢?
#程序员# #编程# #计算机#
猜你喜欢
- 2025-07-07 bitlocker 太恶心了(bitlocker manage)
- 2025-07-07 前后端安全机制(前后端安全机制有哪些)
- 2025-07-07 SpringBoot 接口加解密全过程详解
- 2025-07-07 加密算法的分类与应用(加密算法的种类)
- 2025-07-07 SpringBoot项目快速开发框架JeecgBoot——Web处理!
- 2025-07-07 网页端到端加密聊天系统(网页加密技术)
- 2024-10-10 简述无线网桥的主要加密方式 网桥怎么加密
- 2024-10-10 jsjiami.com.v7加密混淆文件隐藏关键代码的方法
- 2024-10-10 国内首个开源国密前后端分离快速开发平台,追求简洁至上大道至简
- 2024-10-10 如何在不进行审计的情况下对小程序加密数据进行解密
你 发表评论:
欢迎- 07-07使用AI开发招聘网站(100天AI编程实验)
- 07-07Tailwindcss 入门(tailwindcss中文文档)
- 07-07CSS 单位指南(css计量单位)
- 07-07CSS 定位详解(css定位属性的运用)
- 07-07程序员可以作为终身职业吗?什么情况下程序员会开始考虑转行?
- 07-07云和学员有话说:国企转行前端开发,斩获13K高薪!
- 07-0791年转行前端开发,是不是不该转,有啥风险?
- 07-07计算机图形学:变换矩阵(图形学 矩阵变换)
- 594℃几个Oracle空值处理函数 oracle处理null值的函数
- 587℃Oracle分析函数之Lag和Lead()使用
- 575℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 572℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 568℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 561℃【数据统计分析】详解Oracle分组函数之CUBE
- 548℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 541℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)