为什么说MD5是不可逆哈希算法
MD5作为一种Hash算法,因其运算具有不可逆性,常常用于保存密码以及生成数字签名。参考博客1和2对该算法的实现原理进行了详细介绍,在此就不再赘述,只做如下总结:本质上,MD5就是将明文对应的二进制值与四个特定的32位的二进制值进行多轮的与、或、非、异或等运算,将明文对应的二进制转换成新的二进制。
关于为什么MD5是不可逆的,参考博客1中说是由于MD5的运算过程中有很多入参,但实际上,MD5运算过程中的四个入参都是确定的(详见参考博客2中的A、B、C、D)。其实由参考博客2的运算过程可知,当运算过程中出现进位时,进位被直接丢失而不会保存。也就是说,MD5的运算过程存在信息丢失。由于不知道运算过程中会有多少个进位在哪一步被丢弃,因而仅仅根据MD5的计算过程和得到的最终结果,是无法逆向计算出明文的。这才是MD5不可逆的真正原因。
此外,本文还想补充一点就是:MD5常常和Base64编码一起使用。原因是:由前面的总结可知,MD5的输入是明文对应的二进制,输出也是二进制,但由于输出的二进制足够散列,因而无法保证输出的二进制还能解析成可打印字符(以ASCII码为例,其第0~32号及第127号是控制字符或通讯专用字符,不便于打印/显示/存储),而Base64恰好是一种网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
参考博客:
1、https://www.jianshu.com/p/82729c87ef68 MD5的实现原理
2、https://blog.csdn.net/xuejianbest/article/details/80391237 hash算法原理之md5过程
3、https://blog.csdn.net/qq_20545367/article/details/79538530 什么是Base64
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十