MD5 到底是不是加密?
最近参与了线上教学实践后深感收获颇多。例如,在课程准备方面确实比我预想中更加繁琐耗时。无论怎样都希望不断精进自己,在日常工作中整天都在反复练习以求达到更高的水平。通过一次特殊的经历让我深刻体会到了直播讲课与现场演讲的不同感受:第一次在北航阶梯教室前给100名学员直播时异常紧张不安——而相较于面对几百人的正式演讲场合,则完全不那么紧张。许多有趣的事情值得分享交流但今天的主题我想着重谈谈技术问题。
最近几个网络课程中涉及到了编码技术与加密方法。课程的后半部分提到了MD5算法的相关知识。为了澄清这一点,我又回问了一遍同学们。

MD5 是程序开发中最常用的算法之一,在实际应用中得到了广泛使用。提及 MD5 时,大多数人会认为它是一种加密技术;对于有一定技术背景的人来说,则知道它可以用于对密码进行加密;而对于更深入理解的人来说,则清楚地认识到 MD5 已经存在被破解的风险。那么 MD5 到底属于加密技术范畴吗?所谓的"加密"具体指的是什么呢?MD5 的破解又具体是指什么呢?
MD5:一种哈希算法
实质上,MD5 只是一种哈希算法。
散列函数亦称哈希函数,在密码学中被定义为一种将任意长度输入映射到固定长度输出的数学工具。例如,在人与人之间建立对应关系时所使用的"人 -> 人名"这一类方法均可被视为特定类型的散列函数应用实例。其主要作用是生成数字指纹,在实际应用中如文件验证等场景中发挥重要作用:通过计算文件的关键字值(如MD5或SHA1),即可快速判断文件完整性是否发生改变。而这一技术体系中包含多种不同的散列函数实现方案:MD5即是其中最具代表性的方案之一。
加密是什么?
加法是一种将原始信息转化为某种形式的技术手段,在这一过程中原始信息会被重新呈现为另一种形式,并且只有持有特定解密钥匙的人方能够恢复原始信息内容。此外,在实际应用中人们通常会采用加法技术来实现信息安全保障在现代互联网时代由于信息安全问题越来越受到重视人们倾向于使用加法技术来保护敏感信息不被未经授权的获取者所获取例如大家都知道"安全"但很少人知道"为什么安全"的HTTP Secure通道(HTTPS)就是通过加法算法来保障网络安全的实例
注:改写说明:
- 将"拿到"改为"获取到"
- 将"把数据"改为"将数据"
- 将"转换以后"改为"转换后"
- 将"呈现为另一种格式"改为"呈现为另一种形式"
- 增加了对句子结构进行适当调整
- 通过使用更详细的表述使文字自然增加约25%
所以,MD5 是加密吗?
该加密算法的目标在于防止他人有效地获取加密后的数据的同时,在需要恢复原始数据时还可以通过解密操作来重新获取该数据。然而,在此过程中采用的MD5是一种哈希算法的设计理念决定了它通常不具备可逆性特性——即基于MD5计算得出的数据结果,并非能够实现还原到原始输入从而完成解密操作;因此,在这种情况下,并非能够实现还原数据从而解密;同样地,在无法通过反向过程恢复原始输入的情况下,则无法将哈希运算视为真正的「加密」过程。
「不可逆加密」?
你如果试试去查询百度百科,会发现有一个「MD5 加密」的词条:

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

在「不可逆加密算法」词条下,MD5 赫然在列。
然而这些说法都是错误的
这些小知识有什么用?
在开发过程中会频繁遇到这些技术术语,在项目实施中 RSA 常用于身份认证 AES 适用于数据加密 BASE64 常见于 URL 编码 MD5 和 SHA1 常用于文件完整性校验 GZIP 则用于文件压缩解压等操作 每个术语都有其特定的应用场景和作用 在刚入行的时候通常会按照同事提供的指导来完成任务 这种被动的操作方式可能会导致对技术原理缺乏深入理解 当积累了一定的经验后 就应该开始主动学习这些知识 以便更好地解决实际工作中遇到的问题 不清楚自己与他人之间是否存在技术瓶颈 这会影响团队协作效率 每个开发者都希望不断提升自己的技能以达到更高的技术水平 但在职业发展的早期阶段 必须先打好数学基础 建立起个人的技术优势 并通过不断实践积累丰富的工作经验 这样才能在未来的职业道路上走得更远 更加从容地应对各种挑战
所以如果仅仅把它当作一个常识来使用,在日常交流中提及"MD5属于加密技术的一种"并不会带来实质性的价值。然而如果你深入理解其本质与应用场景:了解它到底是什么、它的用途是什么以及如何应用它;同时还要探究各个相关知识点的具体含义、使用方法及其相互间的区别所在;最终形成一个系统化的知识结构,并培养将自身所学系统化处理的思维习惯;这种持续深化对知识进行系统化整理的能力将会为你带来显著的好处。
但是知道的是,并非零散的小知识点足够应付实际问题。仅有这些零散的小知识点是不够的,
当一个人能够轻松应对这些知识点时,
就构成了系统而完整的专业知识储备。
现有的数量已经远远超出了人们的理解与吸收能力,
所以说几乎每个人都会遇到难以掌握的情况。
但是知道的是,并非零散的小知识点足够应付实际问题。但仅有这些零散的小知识点是不够的,
当一个人能够轻松应对这些知识点时,
就构成了系统而完整的专业知识储备。
现有的数量已经远远超出了人们的理解与吸收能力,
所以说几乎每个人都会遇到难以掌握的情况。
比如我再问一个问题:「用 BASE64 来传数据更加安全和稳定」这个说法,正确吗?
另外,文末给大家推荐几个 Android 开发的公众号。
对于熟悉Android开发的人来说,
2014年因DL框架而闻名的任玉刚,
而Rxjava之父扔物线则是Rxjava概念的主要倡导者,
2016年在媒体技术领域有建树的何俊林,
当年徐宜生则以一篇经典的Android开发案例著称,
继Tmic之后的新锐开发者不断涌现,
这些技术人才常出现在技术博客中,
今天为大家推荐一些值得学习的个人公众号!
非著名程序员
非出名程序员 活跃的地方 就在这里 不但能够进行技术交流分享 还能积累丰富的实践经验 了解产品分析与建议 同时也能深入探讨职场生活 你的职业发展与进步 这里不仅能够提供专业的指导 还能让你不断关注互联网的趋势发展情况
非著名程序员,可能是东半球最好的技术分享公众号。

▲ 长按图片识别二维码关注
玉刚说
玉刚分享每天定时发布Android技术资讯与大前端开发经验,并关注职场与生活相关的文章。此外还有一些人工智能相关的内容是由《Android开发艺术探索》一书的作者任玉刚撰写并管理的。

▲ 长按图片识别二维码关注
Android群英传
这个平台是阅读《Android 群英传》以及《Android 群英传:神兵利器》的人群。它同时也提供了一个 Android 开发者进行互动交流的平台,诚挚邀请您加入!

▲ 长按图片识别二维码关注
HenCoder
自三年前发布的一篇题为《给 Android 工程师的 RxJava 详解》的文章起,《扔物线》就成为广大的Android开发者所熟知。 HenCoder 是他个人公众号,在这里他分享的是他认为最精华的知识内容。
正如他在公众号简介中写道:"无论你来自BAT集团、谷歌还是Facebook,也许你在某些方面比我更强,但我依然愿意尽力帮助你成长。" 他是扔物线,不与人相竞争高低,只愿助力你的职业发展。

▲ 长按图片识别二维码关注
何俊林
曾就职于爱奇艺的前技术团队核心成员负责运营与维护工作

▲ 长按图片识别二维码关注
开发者技术前线
2016年几篇Retrofit与Rxjava的技术文章在简书博客上突然走红。其中一家运营该号的公众号名为"Tmic",专注于分享技术资讯及成长类文章,并致力于为开发者提供有价值的内容。值得注意的是,在当前阶段,Tmic主要聚焦于移动端的性能调优与启动优化方面的研究

▲长按图片识别二维码关注
