今天想跟大家聊聊:「MD5 到底是加密的吗?」

MD5 是程序开发中非常常用的一种算法,很多人都用过。提到 MD5,大多数人的反应都是「这是一种加密算法」,懂得多点的人还会说「可以用于给密码加密」,再懂点的还知道「MD5 已经有被破解的可能性了」。但 MD5 到底是加密吗?所谓的加密到底是什么意思?MD5 的破解又是指的什么?

MD5:一种哈希算法

实质上,MD5 只是一种哈希算法。

哈希算法,即 hash,又叫散列算法,是一类把任意数据转换为定长(或限制长度)数据的算法统称。例如我叫张三,你叫李四,那么「人 -> 人名」的算法就叫属于一种哈希算法。哈希算法通常用于制作数字指纹,数字指纹的意思就是「你看到这个东西就像看到原数据一样」,例如我们在一些网站下载大文件的时候,网站提供给我们验证文件完整性的 MD5 或者 SHA1 码,就是原文件的哈希值。哈希算法有很多种,MD5 是其中的一种,这就是 MD5。所以,优秀的哈希算法通常需要具有低碰撞概率(即不同数据的哈希值通常也不一样)。

加密是什么?

加密,指的是对数据进行转换以后,数据变成了另一种格式,并且除了拿到解密方法的人,没人能把数据转换回来。因此,加密通常用于网络通信。因为网络上的通信数据,任何人都有可能会拿到,把数据加密后再传送,送达以后由对方解密后再查看,就可以防止网络上的偷窥。例如大家都知道「安全」但很少人知道「为什么安全」的 HTTPS,就是通过加密算法来保障的网络安全性。

所以,MD5 是加密吗?

加密算法的目的,在于别人无法成功查看加密后的数据,并且在需要的时候还可以对数据进行解密来重新查看数据。而 MD5 算法是一种哈希算法,哈希算法的设计目标本身就决定了,它在大多数时候都是不可逆的,即你经过哈希算法得出的数据,无法再经过任何算法还原回去。所以,既然不能将数据还原,也就不能称之为可以解密;既然不能解密,那么哈希的过程自然也就不能称作是「加密」了。

「不可逆加密」?

你如果试试去查询百度百科,会发现有一个「MD5 加密」的词条:

甚至还有一个词条叫做「不可逆加密算法」:

在「不可逆加密算法」词条下,MD5 赫然在列。

然而,他们都是错的。甚至,「不可逆加密算法」这个词,也是人造的。你甚至可以在网上搜索到一些博客,将加密算法归类为「可逆加密」和「不可逆加密」两类。这其实不能怪百度百科,也不能怪这些归类的人,要怪只能怪,关于数据转换相关的内容太多、太杂,导致大家用着用着就混淆了。

这些小知识有什么用?

在开发中,经常会遇到 RSA、AES、BASE64、MD5、SHA1、SHA256、GZIP 这些词,他们的意义和使用场景都是各不相同的。在刚入行的时候,作为一个底层小码农,只要按照同事的指示,让我 BASE64 我就 BASE64,让我 MD5 我就 MD5,不用问为什么。但是当你有了一定工作经验之后,就应该慢慢开始对这些内容有所了解了,不然不仅在开发中会遇到各种障碍,而且在项目出了相关问题的时候,你甚至不知道是你的问题还是同事的问题。做开发,谁都想往高处走,但你在往高处走之前,需要先建立起自己的优势。

所以如果你只是把这当做一个「小知识」,用「MD5 是不是加密」来跟朋友炫技或者用来在面试时提问求职者,这可能确实没有什么用。要知道,有用的不是小知识,而是在你能够对这些小知识轻松回答时,所体现出的完整知识体系。如果把它的本质了解清楚,它到底是什么、有什么用、怎么用,以及它的相关知识都有哪些,它们各自的含义、用法和区别是什么,这样的体系化的知识,以及这种不断把自己的知识向体系化转换的意识,将会对你非常有用。

想要搭建完整的知识体系,对基础查漏补缺、更加深入的了解技术本质,从而达到突破瓶颈、提升进阶?

那就给大家分享一套 Android GDE 扔物线朱凯老师的【HenCoder Plus】口碑课程:

现在有最新出炉的【第五期课程】的免费试听课,公众号粉丝们可以去抢先学习,添加助教微信,备注暗号【码农】,即可领取最新的试听课了!

夯实基础,掌握本质

高级进阶,没那么难

今天我们来聊聊:MD5 到底是不是加密?相关推荐

  1. MD5 到底是不是加密?

    最近在做线上教学,感触很多.比如,备课比我想象的累多了,超级累,总想做得更好,一天到晚就是备呀备:比如,直播讲课和现场演讲的感觉很不一样,我第一次带着 100 个学员直播上课的时候,比站在北航的阶梯教 ...

  2. 简单聊聊MD5和SHA-256加密

    1. MD5和SHA-256 MD5和SHA-256都是密码散列函数,加密不可逆,所谓的解密实为暴力破解. MD5和SHA-256可以实现对任意长度对象加密,这就决定了传入参数类型为byte数组,如果 ...

  3. MD5 到底算不算一种加密算法?

    一旦提到加密算法,经常有人会有这样的疑问:MD5 到底算不算一种加密算法呢? 在回答这个问题之前,我们需要先弄清楚两点: 什么是加密算法? 什么是 MD5? 1.什么是加密算法? 数据加密的基本过程就 ...

  4. Shiro(三) 身份认证源码分析与 MD5 盐值加密

    文章目录 1. 身份认证 2. 身份验证的基本流程 3. 身份验证实现 3.1 在 `login.jsp` 添加登录表单 3.2 添加表单提交的 Controller 3.3 完善 Realm 的身份 ...

  5. ASP.Net中MD5和SHA1加密的几种方法

    首先简单介绍一下MD5和SHA1: MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Scie ...

  6. C# MD5 32位加密 UTF-8编码

    项目开发过程中需要用到MD5加密,最开始的使用使用加密方法: public static string GetMD5(string str)         {             byte[] ...

  7. 原创:MD5 32位加密软件

    网站后台数据库切勿使用明文保存密码,否则一旦黑客拿下你的Webshell,后果不堪设想. 网站后台密码加密大多数采用的就是MD5算法加密. 今天给大家送一个本人用c#简单编写的MD5 32位加密程序, ...

  8. MD5和SHA1加密

    MD5和SHA1加密 MD5和SHA1算法对数据进行加密 例: 'MD5加密 Dim UserPWD as String UserPWD = System.Web.Security.FormsAuth ...

  9. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

最新文章

  1. Python2和Python3关于reload()用法的区别
  2. rocketmq订阅多个主题_RocketMQ 的消息模型
  3. 深入剖析Redis系列(四) - Redis数据结构与全局命令概述
  4. 2017.4.21 螺旋矩阵 思考记录
  5. python 与或非_“2020”假看完本文若不能让你学通“Python”,我将永远退出IT界!...
  6. 行测(爆发篇)之语句表达,像说话一样自然
  7. windows python安装包_Python-3.9安装包(windows版)
  8. VSCode下Pytorch无法自动补全的问题
  9. 使用Socket类接收和发送数据
  10. ubuntu等linux系统如何阅读caj文档
  11. w10 计算机配置管理模板,Win10系统这些设置能提高电脑的使用效率
  12. python开头编码cc手_python 利用cip.cc查询IP归属地
  13. 男人心中理想女友的职业排行榜
  14. 高斯消元法求解方程组
  15. 程序员如何写好自己的简历,一位 5 年中大厂老哥跟你聊聊
  16. 二值神经网络(Binary Neural Network,BNN)
  17. cnn是深度神经网络吗,cnn神经网络算法
  18. 训练营课前作业个人纪录
  19. linux桌面环境占用内存对比,很轻很强大:轻量级桌面环境比较
  20. Python入门常用工具集合

热门文章

  1. v-if、v-show、v-html 的原理
  2. 交互式AR趣味学习软件
  3. 点亮2021@微信官方 给一个福字 是怎么弄的?附小白教程
  4. 64位和32位各个数据类型大小
  5. python中赋值语句的例子_python赋值语句规则
  6. printf 格式化输出符号详细说明
  7. 全志T507开发板去掉IO扩展芯片,保留扩展引脚功能
  8. 合理使用计算机作文,合理使用手机作文400字
  9. 52个数据可视化图表鉴赏,收藏!
  10. javascript节点遍历方法总结