md5加密规则[通俗易懂]

md5加密规则[通俗易懂]关于MD5加密  MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:  MD5(tanajiya.tar.gz)=0ca175b9c0f726a831d895e269332461  这就是

大家好,又见面了,我是你们的朋友全栈君。

关于MD5加密

  MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

  MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

  这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:

  大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件名做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。

  我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

  MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

  MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。

  正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为”跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160359.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • React 路由跳转后回到页面顶部

    React 路由跳转后回到页面顶部

    2021年5月28日
    522
  • 十大排序——最全最详细,一文让你彻底搞懂

    十大排序——最全最详细,一文让你彻底搞懂最全最详细,一文带你了解十大排序Sort写在前面因为GitHub的主文档太长,不容易维护,所以建立子文档以辅助。本篇内容是主文档中的排序部分的扩展。注:本篇内容最早发布于GitHub中,如果你觉得我写得还行,记得给我Star或是Fork~~献给我的家人作者Three领英知乎力扣CSDN????????????不积跬步,无以至千里;不积小流,无以成江海。????Top代表返回顶部????代表到文档末尾如果你觉得我

    2022年7月24日
    17
  • MySQL数据库分区分表配置以及原理、特点、概念、区别详解「建议收藏」

    MySQL数据库分区分表配置以及原理、特点、概念、区别详解「建议收藏」一、为什么要分表和分区?我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询速度变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。当出现这种情况时,我们可以考虑…

    2022年5月22日
    39
  • phpmyadmin安装教程及配置设置

    phpmyadmin安装教程及配置设置.一般网上下载到的phpmyadmin是一个压缩包,我们将其释放到htdocs目录中,例如htdocs\phpmyadmin。  2.打开phpmyadmin目录,在此目录下是否有config.sample.inc.php文件,如果存在,那么将其改名为config.inc.php。(根据版本不同,有可能直接就有config.inc.php文件,那就无需改名,也有可能根本就没有config.

    2022年6月1日
    27
  • jsonObject_jsonobject.tobean

    jsonObject_jsonobject.tobeanJSONObject简介转自:http://blog.csdn.net/huangwuyi/article/details/5412500JSONObject与JSONArray的使用一、JAR包简介     要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:     1.commons-lang.jar     2.comm

    2022年9月15日
    4
  • cuDNN安装教程(Windows)「建议收藏」

    cuDNN安装教程(Windows)「建议收藏」简介NVIDIACUDA®深度神经网络库(cuDNN)是一个用于深度神经网络的GPU原始加速库。cuDNN为标准例程(如前向和反后卷积、池化、归一化和激活层)提供了高度调整的实现。世界各地的深度学习研究人员和框架开发人员依靠cuDNN获得高性能GPU加速。它允许他们专注于培训神经网络和开发软件应用程序,而不是花时间在低级别的GPU性能调整上。cuDNN加速广泛使用的深度学习框架,包括Caffe2、Chainer、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch和T

    2022年6月6日
    105

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号