首页 > 编程知识 正文

md5是一种加密算法(md5加密算法原理)

时间:2023-05-05 07:52:43 阅读:98023 作者:3581

在开发过程中,不可避免的会涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密。涉及多种加密算法。作为takenism的开发者,时间和精力都是有限的,了解主流的加密算法和用途就足够了。 主要的数据加密算法有md5、sha、aes、des、rsa、base64等。 再来看看我们的老熟人:md5算法MD5算法是一种哈希算法。虽然不能算是真正的加密算法,但几乎在任何系统中都是不可或缺的。MD5算法全称是消息摘要算法5(信息摘要算法5),是数字摘要算法的一种实现,摘要长度为128位。由于其哈希算法的典型特征,注定了它无法从密文中准确还原明文,因此MD5算法不能被视为真正的加密算法,但在很多地方它又被统称为加密算法。因为它具有足够的复杂性和不可逆性,所以主要用于保证信息传输的完整性和一致性。他还有早期的MD2、MD3、MD4代(早期的几代因为复杂度不够被破解)。因为MD5算法具有这样的特点,所以在行业中应用广泛,主流编程语言都有自己的MD5实现。 最常见的是,许多系统中的用户密码都是通过MD5加密算法加密的。但是大树一定会被风吹走。正如windows系统被广泛使用一样,安全性也受到了挑战,MD5也不例外。欢快酸奶会发现,提供MD5破解的网站很多,有的甚至需要收取破解服务费用。 不过不用担心,目前破解MD5和还原原始数据的成功率很低(当然不要提像123456这样的弱智原文,其他破解都可以用欢快酸奶来完成)。有必要提一下目前MD5算法的主要破解思路。其实只有一个核心,就是暴力碰撞(还有另外两个字典法和彩虹表法,都是暴力碰撞法的改进,原理相同)。说白了,就是用已知的字符进行各种异常组合,生成无数对应的密文和原文库,然后根据密文反向查找对应的明文。 比如你的明文数据是abcd1234(当然其实不应该这么简单,这里只是举个例子),加密后的密文是E19D5CD 5AF 0378 da 05 f 63 f 891 c 7467 af,所以不安好心的人会用密文E19D5CD 5AF 0378 da 05 f 63 f 891 c 7467 af来为这类破解提供工具或服务。检查该密文是否对应明文。如果是,则表示解密成功。然后他用这个“解密”得到的明文登录你的账户。结果可想而知。 成功已经进入你的领地,但这种成功并不完美。由于md5的不可逆性,在大多数账户登录过程中,用户输入的原始文本只能被加密成MD5密文,然后与数据库中的密文进行比对。如果相同,则确定密码正确。 然而,这也有一个陷阱,因为即使破解的结果不是上面提到的abcd1234而是xxxxx

,也可以使用xxxx成功登录系统。

因为MD5是不可逆的,但不是唯一的。这里所谓的破解,并不是把摘要还原成原文。为什么呢?由于固定的128位摘要(即加密密文)是有限的,而原始文本的数量是无限的,所以每个摘要都可以通过对几个原始文本进行Hash得到。换句话说,不同的原始文本可能被加密以获得相同的密文。然后,如果你用密文猜测原文,你会得到多个结果。如果你简单地比较密文,你会被认为是一致的。另一方面,也是如此。获得恢复的明文不一定适合做其他操作,也可能不成功。

综上所述,MD5加密算法成功破解的概率很低,主要是因为以下几点:1)依靠暴力碰撞的破解思路意味着需要尽可能将所有字符组合起来,形成海量匹配库,通过密文对明文进行反向查询。然而,千千有成千上万个角色,所有这些角色加起来,这种可能性超过了地球上细胞的总数。估计没有全部硬盘组合的空间,成本高。

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

3)即使密文是对的,原始明文也不一定是对的。当然,这是最后一道防线,掌握在上帝手中。

此外,目前MD5的主要用途不超过两个,一个是对用户密码等不需要恢复的敏感数据进行加密,另一个是保证信息传输的完整性和一致性。其实第二个目的就是他出生的初衷。

这里,简单提一下第二个用途。很多支付接口和数据交互接口都是基于MD5来保证数据的完整性和一致性,即在网络传输过程中没有被篡改。如何保证数据不被篡改,不仅靠MD5做不到,其他加密算法也做不到。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。