zoukankan      html  css  js  c++  java
  • MD5校验

    MD5简介

    原理略,只需要知道它是对一段信息产生128位的hash值,且不可逆。

    因此不难想到它的一些应用:

    1)密码管理

    当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。MD5算法可以很好地解决这个问题,因为它可以将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文相同的情况下,才能等到相同的密文,并且这个算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。这样就可以把用户的密码以MD5值(或类似的其它算法)的方式保存起来,用户注册的时候,系统是把用户输入的密码计算成 MD5 值,然后再去和系统中保存的 MD5 值进行比较,如果密文相同,就可以认定密码是正确的,否则密码错误。通过这样的步骤,系统在并不知道用户密码明码的情况下就可以确定用户登录系统的合法性。

    2)电子签名

    使用 MD5算法就可以为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。我们在下载软件的时候经常会发现,软件的下载页面上除了会提供软件的下载地址以外,还会给出一串长长的字符串。这串字符串其实就是该软件的MD5 值,它的作用就在于下载该软件后,对下载得到的文件用专门的软件(如 Windows MD5 check 等)做一次 MD5 校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用 MD5 算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面

    3)垃圾邮件筛选

    在电子邮件使用越来越普遍的情况下,可以利用 MD5 算法在邮件接收服务器上进行垃圾邮件的筛选,以减少此类邮件的干扰,具体思路如下:

    1. 建立一个邮件 MD5 值资料库,分别储存邮件的 MD5 值、允许出现的次数(假定为 3)和出现次数(初值为零)。
    2. 对每一封收到的邮件,将它的正文部分进行MD5 计算,得到 MD5 值,将这个值在资料库中进行搜索。
    3. 如未发现相同的 MD5 值,说明此邮件是第一次收到,将此 MD5 值存入资料库,并将出现次数置为1,转到第五步。
    4. 如发现相同的 MD5 值,说明收到过同样内容的邮件,将出现次数加 1,并与允许出现次数相比较,如小于允许出现次数,就转到第五步。否则中止接收该邮件。结束。
    5. 接收该邮件

    MD5加密

    使用python

    import hashlib
    
    def md5(str):
        m = hashlib.md5(str.encode(encoding='utf-8'))
        return m.hexdigest()
    
    print(md5('a'))
    print(md5('世界'))

    使用Windows自带工具

    CertUtil -hashfile <path to file> MD5

    根据文件大小计算需要几秒钟,如果成功,MD5 hash值将显示如下:

    C:Users20928Downloads>CertUtil -hashfile a.txt MD5
    MD5 的 a.txt 哈希:
    c086b3008aca0efa8f2ded065d6afb50
    CertUtil: -hashfile 命令成功完成。

    也可以为其他 hash 算法生成校验和,用以下任意一个参数替换上面使用的 MD5 (注意,如果没有指定值,则默认使用 SHA1)

    • MD2
    • MD4
    • MD5
    • SHA1
    • SHA256
    • SHA384
    • SHA512

    因此,下一次当你下载完文件记得试一试。

    MD5解密

    hash算法本身是不可逆的,但是一个特定的字符串其MD5值也是确定、唯一的,因此很直接地想到一种方法:对不同的串计算MD5,直到算出的MD5与给定的相同,这个串就是我们要找的串。当然,这个工作量巨大,这种方法没有实际作用。

    但是,已有许多数据库存储常用的明文密文对,可以帮助我们解密。

    例如,https://www.cmd5.com/

    参考链接:

    1. 陈柏林的Blog-Windows 10(7) 内置 MD5 校验和计算工具

    2. CSDN-大蛇王-python 对字符串进行md5加密

    3. 百度百科-MD5

  • 相关阅读:
    【2】通过Ajax方式上传文件(图片),使用FormData进行Ajax请求
    【1】mongoDB 的安装及启动
    第一篇博客
    Java Integer 进制转化的实现(附源码),对模与补码的理解
    筛法求素数(普通筛法与欧拉筛法) 这是个问题
    字典的拼接方法
    使用Selenium抓取百度指数一
    正则表达式30分钟入门教程
    微博抓取尝试
    __call__方法的最简要说明
  • 原文地址:https://www.cnblogs.com/lfri/p/12257706.html
Copyright © 2011-2022 走看看