zoukankan      html  css  js  c++  java
  • 11-19 hashlib模块

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

    什么是摘要算法呢?

      摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

    摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

    摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

    sha 算法  随着算法复制程度成都的增加,摘要的时间和成本空间都会增加

    摘要算法的作用
    1、密码的密文存储
    2、文件的一致性验证
    在下载的时候,检查我们下载的文件和远程服务器上的文件是否一致
    两台机器上的两个文件,你想检查这两个文件是否相等
    摘要算法:包括一堆算法
    import hashlib  #提供摘要算法的模块
    md5 = hashlib.md5()    #使用了md5算法
    md5 = hashlib.sha1()    #使用了sha1算法
    md5.update(b'alex3714') #aee949757a2e698417463d47acac93df
    print(md5.hexdigest())
    
    说明:
        不管算法多么不同,摘要的功能始终不变
        对于相同的字符串,使用同一个算法进行摘要,得到的值总是不变的
        对于相同的字符串,使用不同的算法进行摘要,得到的值应该不同
        不管使用什么算法,hashlib的方式永远不变
    

    做摘要计算,实质就是把字节类型的内容进行摘要处理
    MD5方式:正常md5、加盐的、动态加盐的

    例子:

    #用户登录-----(用
    作为分隔符,容易出错,因为下面是以line来遍历的)
    import hashlib
    usename = input('输入名字:')
    password = input('输入密码:')
    md5 = hashlib.md5()
    #生成加密串,其中 password 是要加密的字符串
    md5.update(b'password')
    #获取加密串
    get_psd = md5.hexdigest()
    with open('userinfo','w') as f:
        f.write(usename+'|')
        f.write(get_psd)
    f.close()
    
    #用户登录
    import hashlib
    usename = input('输入名字:')
    password = input('输入密码:')
    md5 = hashlib.md5()
    #生成加密串,其中 password 是要加密的字符串
    md5.update(b'password')
    #获取加密串
    getnew_psd = md5.hexdigest()
    print(getnew_psd)
    with open('userinfo') as f:
        for line in f:
            user,psd = line.split('|')
            if usename ==user and getnew_psd == psd:
                print('登录成功!')
            else:
                print('登录失败!')
                exit()
    f.close()
    
    摘要算法中加盐
    import hashlib  #提供摘要算法的模块
    md5 = hashlib.md5(bytes('salt',encoding='utf-8'))    #使用了md5算法
    md5.update(b'alex3714') #aee949757a2e698417463d47acac93df
    print(md5.hexdigest())  #29520817dd17b99ea7af32890f7698fb(和不加盐的结果不一样)
    

    动态加盐

    使用用户的一部分或者直接使用使用整个用户名作为盐
    import hashlib  #提供摘要算法的模块
    md5 = hashlib.md5(bytes('盐',encoding='utf-8')+b'123')    #使用了md5算法
    md5.update(b'alex3714')
    print(md5.hexdigest())  #28236e01d84bd2ecc7642c4e9b811845(结果不一样)
    
    import hashlib
    md5 = hashlib.md5()
    md5.update('alex')
    md5.update('3714')
    print(md5.hexdigest)#得到的结果与不分开的一致,所以以后可以对字符串或者文件分开update
    

      

     

  • 相关阅读:
    CodeForces
    CodeForces
    AtCoder
    AtCoder
    CodeForces
    CodeForces
    CodeForces
    CodeForces
    Centos7配置yum国内镜像及仓库升级
    环境变量
  • 原文地址:https://www.cnblogs.com/Cheryol/p/9982113.html
Copyright © 2011-2022 走看看