zoukankan      html  css  js  c++  java
  • python常用模块——hashlib模块

    Python的hashlib提供了常见的摘要算法,如md5、sha1等

    什么是摘要算法了?摘要算法又称哈希算法、散列算法。

    它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的字符串表示)。

    摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,可以来核对你想要的数据是否被篡改了。

    摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。

    而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

    我们以最常见的md5为例:

    import hashlib
    md5 = hashlib.md5()   #选择摘要算法中的md5类进行实例化,得到md5
    md5.update(b"everything is passible")   #对一个字符串进行摘要
    print(md5.hexdigest())   #找摘要算法要结果

    计算结果如下:

    a8c816f56c74b68e4d547769531a46d1

    如果数据很大,可以分多次调用update()进行摘要,最后计算的结果是一样的:

    import hashlib
    md5 = hashlib.md5()
    md5.update(b"everything")
    md5.update(b" is passible")
    print(md5.hexdigest())

    md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。

    另一种常见的摘要算法就是sha1,调用sha1和调用md5完全类似:

    import hashlib
    sha1 = hashlib.sha1()
    sha1.update(b"everything is passible")
    print(sha1.hexdigest())

    计算结果:

    000da64f15dce120bd685b189c3e169a1f67753b

    sha1的结果是160bit字节,通常用一个40位的十六进制字符串表示。

    比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。

    hashlib一般在文件的一致性校验和加密认证这两方面使用的比较多。

    由于常用口令的md5值很容易被计算出来,一般我们会添加一些操作,比如“加盐”,就是通过对原始口令加一个复杂字符串来实现。比如:

    #前后加了一些特殊字符串,减少了出现的机率。
    import hashlib
    md5 = hashlib.md5()
    md5.update(b"*)_#$%^&everything is passible%^&")
    print(md5.hexdigest())

    小结:

    摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改和客户验证。

  • 相关阅读:
    Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)
    简单易懂的laravel事件,这个功能非常的有用(监听事件,订阅者模式)
    搭建docker私有仓库
    CreatarGlobe实现多机立体显示方案(初稿)
    基于3D Vision眼镜的OSG立体显示 【转】
    一天干掉一只Monkey计划(一)——基本光照模型及RT后处理 【转】
    一天干掉一只Monkey计划(序)【转】
    RenderMonkey基本使用方法【转】
    怎样使用libcurl获取隐藏了文件后缀的url网络文件类型
    VR开发者必看:4大最为值得关注的内容平台【转】
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7886005.html
Copyright © 2011-2022 走看看