在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,作为拿来主义的开发者时间精力有限,能够清楚其中主流的加密算法和用途,就已经足够了。

主要的数据加密算法主要有:md5、sha、aes、des、rsa、base64等等。

先来看看我们的老熟人:md5算法,几乎在任何一个系统中,都少不了他的身影。MD5算法全称叫 Message Digest Algorithm 5(信息摘要算法5),是数字摘要算法的一种实现,摘要长度为128位。由于其算法的复杂性和不可逆性,主要用于确保信息传输完整性和一致性。他还有早期的“不太争气”的几代MD2、MD3、MD4(早期的几代就是由于复杂度不够被破解了)。正是由于MD5算法有如此特性,在业界应用非常广泛,主流的编程语言都自带有MD5的实现。

最常见的,很多系统中的用户密码都采用了MD5加密算法进行加密。但是树大必然招风,就像windows系统应用广泛了,安全性就收到了挑战,MD5也不例外。度娘一下就会发现,有诸多网站提供MD5破解,有的甚至需要收费提供破解服务。

不过不用担心,目前能破解MD5并还原出原始数据的成功率很低(当然像123456这种弱智的原文,就不要提了,其他的破解可以自行度娘试试)。这就需要提到现行MD5算法的主要破解思路,其实核心只有一个,那就是暴力碰撞(其他还有两种 字典法、彩虹表法都是暴力碰撞法的改良,原理一样),说白了就是用已知的字符进行各种变态组合,生成众多的密文与原文的对应库,然后反向根据密文,找到对应的明文。

比如,你的明文数据是 abcd1234(当然实际不应该这么简单,这里只是举例),加密出来的密文是e19d5cd5af0378da05f63f891c7467af,那么不安好心的人就会用密文e19d5cd5af0378da05f63f891c7467af去提供这种破解的工具或者服务那里,查询这个密文有没有对应明文,如果有,就代表破解成功了,然后他就拿这个“破解”得到的明文去登录你的账号,结果可想而知。

成功进入了你的领地,但这个成功,是不完美的。因为md5的不可逆性,大多数账号登录过程,只能拿用户输入的原文加密成MD5密文后去跟数据库里的密文比较,相同则认定密码正确。

但这也有漏网之鱼,因为即使破解出来的结果不是上面说到的abcd1234而是xxxxx,也有可能用xxxx成功登录系统。

因为MD5虽然不可逆,但不是唯一性。 这里所谓的破解,并非把摘要还原成原文。为什么呢?因为固定128位的摘要(也就是加密后的密文)是有穷的,而原文数量是无穷的,每一个摘要都可以由若干个原文通过Hash得到。换句人话说,就是不同的原文可能加密后得到相同的密文。那么拿密文猜测原文就会得到多个结果,单纯比较密文,就会被认为是一致的。而反过来,也是同理。拿到不一定对的还原出来的明文去做其他操作,也不一定能成功。

总结一下,MD5加密算法之所以破解成功的概率很低,主要由于以下几点:
1)依赖暴力碰撞的破解思路,意味着需要尽可能多的组合所有字符,形成海量的配对库,用于通过密文反向查询明文,但字符种类千千万万,所有都进行组合,可能性都超过地球的细胞总数了,估计现在所有硬盘加在一起的空间都存不下,成本之高,可想而知。

2)目前能破解的都属于已经被组合猜测过的,一般也都是长度较短的或者比较有规律的组合。只要长度越长越没有规律,不同类型字符组合越多,破解概率越低,几乎不会成功。

3)就算密文对了,原始明文也不一定对,当然这是最后一道防线,听天由命了。

另外,MD5的用途,目前主流的无非两种,一种是用于类似用户密码等不需要还原的敏感数据的加密,一种是用于确保信息传输完整性和一致性。其实,第二种用途才是他诞生的初衷。

这里简单提一下第二种用途。很多支付接口、数据交互接口,都采用基于MD5来确保数据的完整性和一致性,也就是在网络传输过程中没有被篡改。如何保证数据不被篡改,仅仅依靠MD5做不到,还需要联手其他加密算法,具体请后续再谈。

本文由弈码当先 root1024 独家发布!

加密算法极先锋之MD5算法的更多相关文章

  1. 加密算法之 MD5算法

    题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致 一.针对文件内容生成MD5值 应用场景:针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可 ...

  2. MD5算法C/C++的实现

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52334027 在逆向程序的时候,经常会碰到加密的算法的问题,前面分析UC的逆向工程师的 ...

  3. md5算法原理一窥(其一)

    首先,需要了解的事,md5并不是传说中的加密算法,只是一种散列算法.其加密的算法并不是我们说所的那样固定不变,只是一种映射的关系. 所以解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD ...

  4. Java利用MessageDigest提供的MD5算法加密字符串或文件

    MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...

  5. MD5算法【计算文件和字符串的MD5值】

    1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5 ...

  6. password技术应用设计实践-安全信息传输系统(SITS)(用Java实现DES、RSA、MD5算法)

    本系统包含五个模块,注冊模块.登录模块.RSA算法模块.DES算法模块.MD5算法模块. 这五个模块每个实现不同的功能. 注冊模块实现将username和password写入文件里,登录模块则负责将其 ...

  7. 【密码学】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能:    输 ...

  8. 【编程开发】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用.     MD5功能: ...

  9. MD5算法+盐Salt

    1.MD算法的基的概念    MD5算法是典型的消息摘要算法,其前身有MD2.MD3和MD4算法,它由MD4.MD3和MD2算法改进而来.不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生 ...

随机推荐

  1. 用PHP写下HELLO WORLD!

    一.选择PHP开发工具 1.phpstorm最新版本 2.打开phpstorm界面 按create键,选择new window ,出下如下页面: 鼠标放在文件夹上,右键单击,弹出以下对话框:做如下操作 ...

  2. 第一个javaWeb项目-注册界面

    基本功能: 实现信息录入到数据库和信息规范检查 题目要求: 项目目录: 网页界面: 程序源码: package Dao; import java.sql.Connection; import java ...

  3. Java入门 - 语言基础 - 08.运算符

    原文地址:http://www.work100.net/training/java-operator.html 更多教程:光束云 - 免费课程 运算符 序号 文内章节 视频 1 概述 2 算术运算符 ...

  4. 用postman导出excel文件

    原文地址:https://jingyan.baidu.com/article/915fc414559b4351394b2084.html 现在的web和移动开发,常常会调用服务器提供restful接口 ...

  5. kuangbin专题专题十一 网络流 Dining POJ - 3281

    题目链接:https://vjudge.net/problem/POJ-3281 题目:有不同种类的食物和饮料,每种只有1个库存,有N头牛,每头牛喜欢某些食物和某些饮料,但是一头牛 只能吃一种食物和喝 ...

  6. python读取文件使用相对路径的方法

    场景描述: python传统的读取文件的方法,通过读取文件所在目录来读取文件,这样出现的问题是,如果文件变更了存储路径,那么就会读取失败导致报错 如下方脚本 def stepb(a):#写入txt f ...

  7. Liunx(centos8)下的yum的基本用法和实例

    yum 命令 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的 ...

  8. Linux下的openssh详解

    前言 SSH(Secure Shell)是一个提供数据通信安全.远程登录.远程指令执行等功能的安全网络协议,由芬兰赫尔辛基大学研究员Tatu Ylönen,于1995年提出,其目的是用于替代非安全的T ...

  9. 容器技术与docker

    名词介绍 IaaS:基础设施即服务,要搭建上层数据应用,先得通过互联网获得基础性设施服务 PaaS:平台即服务,搭建平台,集成应用产品,整合起来提供服务 SaaS:软件即服务,通过网络提供程序应用类服 ...

  10. Docker深入浅出系列 | Image实战演练

    目录 课程目标 Container与Image核心知识回顾 制作Docker Image的两种方式 Dockerfile常用指令 Image实战篇 通过Dockerfile制作Image 通过Dock ...