admin md5
最近在做线上教学,感触很多。比如,备课比我想象的累多了,超级累,总想做得更好,一天到晚就是备呀备;比如,直播讲课和现场演讲的感觉很不一样,我第一次带着 100 个学员直播上课的时候,比站在北航的阶梯教室面对几百个人做演讲还紧张得多(其实吧,现场演讲一点也不紧张)。很多有意思的事,有机会分享一下,但今天我想说技术。
前几天在讲网络的时候,讲到了编码和加密,末尾讲到 MD5 的时候我先问了一下大家:「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 是不是加密」来跟朋友炫技或者用来在面试时提问求职者,这可能确实没有什么用。但你如果把它的本质了解清楚,它到底是什么、有什么用、怎么用,以及它的相关知识都有哪些,它们各自的含义、用法和区别是什么,这样的体系化的知识,以及这种不断把自己的知识向体系化转换的意识,将会对你非常有用。
要知道,有用的不是小知识,而是在你能够对这些小知识轻松回答时,所体现出的完整知识体系。小知识太多了,没人能学的完。
比如我再问一个问题:「用 BASE64 来传数据更加安全和稳定」这个说法,正确吗?
Android 开发者对以下的几个名字不会太陌生,2014年的 DL 先驱任玉刚,15年的 Rxjava 鼻祖扔物线, 16年的对媒体技术研究的何俊林,14年 Android 开发案列徐宜生,16年后起新秀 Tamic,以 Android 起家目前创业的非著名程序员,大家可能在博客中都能看到这些技术人的身影,或者在技术分享沙龙上看到过他们,而如今很多人都在大公司或者已经创业,今天我推荐下他们的公众号!
非著名程序员
非著名程序员,移动开发者的聚集地,这里不仅有移动开发技术分享,还有编程经验,产品分析,职场生活,以及互联网趋势分析与观察。带你提高自己技术的同时,还能让你时时刻刻走在技术和互联网的最前沿。
非著名程序员,可能是东半球最好的技术分享公众号。
▲ 长按图片识别二维码关注
玉刚说
玉刚说每日9点准时推送 Android 技术干货、大前端、职场和生活,也有部分人工智能文章,由《 Android 开发艺术探索》作者 任玉刚 创建并维护。
▲ 长按图片识别二维码关注
Android群英传
本公众号是《Android 群英传》及《 Android 群英传:神兵利器》的读者群,同时也是 Android 开发者交流、分享的地方,欢迎大家关注~
▲ 长按图片识别二维码关注
HenCoder
自从三年前的那篇《给 Android 工程师的 RxJava 详解》开始,扔物线就被广大的 Android 开发者所认识。HenCoder 是他的个人公众号,这里分享的全是他所认为的精华知识。正如他公众号介绍里所说的,「不管你来自 BAT,还是 Google facebook,也许你比我强,但我可能依然能帮到你。我是扔物线,我不和你比高低,我只助你成长。」
▲ 长按图片识别二维码关注
何俊林
一位前爱奇艺技术人运营和维护,公众号主要分享个人原创 (Android/音视频/多媒体/编解码)技术干货,问题深度总结,FrameWork 源码解析,FFmpeg 研究,直播技术,职场思考等。深耕于Android 多媒体技术领域。即将出版《Android 音视频开发》一书
▲ 长按图片识别二维码关注
开发者技术前线
2016年几篇 retrofit 和 Rxjava 在简书博客上突然火了起来,该号是 Tamic 运营的公众号, 主要以分享技术资讯,成长的文章给开发者,目前 Tamic 主要对移动端打点,启动优化有研究!
▲长按图片识别二维码关注
相关阅读
android应用中常用的加密方式有三种:MD5,AES,RSA。在进行实际的开发过程中,一般是几种加密方式配合使用,这样加密效果会更好,被破解的
我是一位普通的培训讲师。我发现我们老师正被视频教学盗版侵害着。比如a有几个卖视频教学的老师朋友,购买了很贵的加密系统加密视
目前视频加密软件有很多,但是面对众多选择,使用者如何选择高效好用的一款呢?在做选择之前我们要有一个标准小编认为以下4个特点可以
md5加密很早就知道,加密 肯定是安全啊,直到真正用到了,才去想,在后台进行加密,那到底有什么作用呢? 这样的MD5加密,为了防止谁呢? 查了一
最近由于工作需要,转而去研究加密与解密的东西,这个密码学的东西还是比较复杂的,还需要补一下数学知识。我会持续分享这方面的内容,由