Python3之数据指纹MD5校验与对比

系统 1346 0

MD5消息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

概述

MD5校验码通过散列函数计算而成,可以生成任何数据的数据“指纹”,即我们可以利用MD5将消息或者数据压缩成摘要,是的数据量变小,便于比较验证数据的完整和正确性。因为两个不同的文件几乎不可能拥有相同的MD5哈希值,任何对一个文件的非恶意变更都会导致其MD5哈希值改变。所以MD5哈希常用语检查文件完整性,尤其是检测文件传输、磁盘错误或其他情况文件的正确性。

MD5

在Python中我们利用内置模块hashlib即可完成MD5的实现和使用。

            
              
                import
              
               hashlib

m 
              
                =
              
               hashlib
              
                .
              
              md5
              
                (
              
              
                )
              
              
                # 假设文件内容
              
              
src 
              
                =
              
              
                'I like Python'
              
              
m
              
                .
              
              update
              
                (
              
              src
              
                .
              
              encode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              m
              
                .
              
              hexdigest
              
                (
              
              
                )
              
              
                )
              
            
          

示例结果:

            
              17008b7417701b0c233b999d20c13f1d

            
          

文件验证

假设现有有两个文件,我们需要验证这两个文件是否一样

            
              
                import
              
               hashlib



              
                def
              
              
                out_md5
              
              
                (
              
              src
              
                )
              
              
                :
              
              
                # 简单封装
              
              
    m 
              
                =
              
               hashlib
              
                .
              
              md5
              
                (
              
              
                )
              
              
    m
              
                .
              
              update
              
                (
              
              src
              
                .
              
              encode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                )
              
              
                return
              
               m
              
                .
              
              hexdigest
              
                (
              
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                '1.txt'
              
              
                ,
              
              
                'r'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    src 
              
                =
              
               f
              
                .
              
              read
              
                (
              
              
                )
              
              
    m1 
              
                =
              
               out_md5
              
                (
              
              src
              
                )
              
              
                print
              
              
                (
              
              m1
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                '2.txt'
              
              
                ,
              
              
                'r'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    src 
              
                =
              
               f
              
                .
              
              read
              
                (
              
              
                )
              
              
    m2 
              
                =
              
               out_md5
              
                (
              
              src
              
                )
              
              
                print
              
              
                (
              
              m2
              
                )
              
              
                if
              
               m1 
              
                ==
              
               m2
              
                :
              
              
                print
              
              
                (
              
              
                True
              
              
                )
              
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                False
              
              
                )
              
            
          

示例结果:

            
              bb0c1b519a0a2b8e6c74703e44538c60
43cb091db43a710d85ce45fb202438cd
False

            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论