• 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())

    小结:

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

  • 相关阅读:
    Redis系列 (一) Ubuntu环境下搭建
    HIve高级函数
    SparkCore系列(三)广播变量和累加器
    SparkCore系列(二)rdd聚合操作,rdd之间聚合操作
    SparkCore系列(一)变换操作,查找取值操作
    从零学scala(九)类型参数、高级类型
    sparksql系列(六) SparkSql中UDF、UDAF、UDTF
    从零学scala(八)注解、XML处理
    从零学scala(七)集合、模式匹配和样例类
    Linux文件系统,硬链接、软链接、iNode、dentry
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7886005.html
Copyright © 2020-2023  润新知