zoukankan      html  css  js  c++  java
  • hashlib模块

    hashlib:封装了一些用于加密的类

    常用加密算法:md5:文件校验,比如已知道服务器上的安装包的sha值,在本地检测下载好的文件的sha值是否一致

           sha系列:金融类,安全类,对安全性要求较高的企业。随着sha系列数字越高,加密越复杂,越不容易破解,但是耗时越长

    特点:1.把一个大的数据,切分成不同块,分别对不同的块进行加密,

    再汇总的结果和直接对整体数据加密的结果是一致的

          2.单向加密,不可逆

       3.原始数据的一点小的变化,将导致结果的非常大的差异,即'雪崩效应'

    加密算法的基本步骤:

       1.获取一个加密对象

       2.使用加密对象的update方法,进行加密,update方法可以调用多次

       3.通常通过hexdigest方法获取加密结果

    验证个数据两次加密的结果对比,

    如果结果相同,说明数据相同

    MD5算法代码展示

    import hashlib
    
    
    # 1.获取一个加密对象(可以直接在参数中添加数据对象而不需要使用update,结果是一样的)
    m = hashlib.md5()
    # 2.使用加密对象的update,对转换成bytes的数据类型进行加密
    m.update(b'abc')
    # 3.通过hexdigest获取加密结果
    res = m.hexdigest()
    print(res, len(res))

    sha系列算法代码展示

    s = hashlib.sha224()
    s.update(b'abc')
    print(s.hexdigest(), len(s.hexdigest())) # 不同的加密算法,实际上是加密结果长度的不同

    必要时我们需要使加密过程更复杂化,这里就涉及到了一个概念‘加盐’

    import hashlib
    
    
    s = 'Python'
    m = hashlib.md5('sault'.encode('utf-8'))  # 这里的盐我用sault指代,可以任意指定
    
    # 原数据拆分成不同的块,分块加密,最后的加密结果是一致的
    m.update('Py'.encode('utf-8'))
    m.update('thon'.encode('utf-8'))
    print(m.hexdigest())

    s1 = 'happiness' m = hashlib.md5('sault'[::2].encode('utf-8')) # 这里我对某个数据类型进行切片,使'盐'更动态化 m.update(s1.encode('utf-8')) print(m.hexdigest())
  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13527354.html
Copyright © 2011-2022 走看看