• hashlib 模块


    hashlib模块的本质:

      1、内部有算法的模块

      2、内部不止一种算法

    hashlib模块的作用:

      1、由于数据的不安全性,为了保证用户的信息绝对的安全,所以所有人的密码都不可以

      2、明文的形式存储,而应该经过适当的处理以密文的形式存起来

    hashlib模块的作用:

      1、大家去计算这个密文 使用的是相同的算法

      2、这个算法不可逆

      3、不同的字符串通过这个算法的计算得到的密文总是不同的

      4、相同的算法 相同的字符串 获得的结果总是相同的

      5、不同的语言 不同的环境(操作系统、版本、时间)

    hashlib的基本用法

    import hashlib
    md5_obj = hashlib.md5()     # 选择不同的哈希算法(不同系列)
    md5_obj.update('666'.encode('utf-8'))   # update只接受字节。(b'you911230'或者.encode('utf-8'))
    ret = md5_obj.hexdigest()  # hex十六进制,digest消化
    print(ret)   
    结果为:
    699bb2b220096188a700ac5129dda46f # md5为32位的十六进制的密文

    加入哈希算法的登录程序

    import hashlib
    def get_md5(s):
        md5_obj = hashlib.md5()
        md5_obj.update(s.encode('utf-8'))
        ret = md5_obj.hexdigest()
        return ret
    name = input('name>>>')
    pwd = input('password>>>')
    with open('userinfor') as f:        # str
        for line in f:
            user,paswd = line.strip().split('|')
            if name == user and get_md5(pwd) == paswd:      # hashlib之后再存储、比较
                print('登陆成功')
                break
        else:
            print('登录失败')

    注意:1、文件操作:f.readlines()浪费内存

       2、md5不能重复使用

    hashlib 摘要算法
      多种算法

      md5算法 :32位16进制的数字字符组成的字符串
            应用最广大的摘要算法
            效率高,相对不复杂,如果只是传统摘要不安全
      sha算法 :40位的16进制的数字字符组成的字符串
          sha算法要比md5算法更复杂
          且shan n的数字越大算法越复杂,耗时越久,结果越长,越安全
    sha_obj = hashlib.sha1()
    sha_obj.update('alex3714'.encode('utf-8'))
    ret = sha_obj.hexdigest()
    print(len(ret)) # 40

    动态加盐

    import hashlib
    def get_md5(user,s):
        md5_obj = hashlib.md5(user.encode('utf-8'))   # 用户名作为盐
        md5_obj.update(s.encode('utf-8'))
        ret = md5_obj.hexdigest()
        return ret
    
    print(get_md5('alex', 'alex3714')) # ee838c58e5bb3c9e687065edd0ec454f
    print(get_md5('wuser', '666'))  # 2193ed3002d63fea40ddfcc0178cb8fe
    print(get_md5('zhangsan ', '666'))  # d3f40c7661e1d28d3df38aa1f5c85029
    文件的一致校验
    给一个文件中的所有内容进行摘要算法得到一个md5的结果
    import hashlib
    def get_file_md5(file_path):
        md5_obj = hashlib.md5()                     # md5不能重复使用
        with open(file_path,encoding='utf-8') as f:
            for line in f:
                md5_obj.update(line.encode('utf-8'))    # update可以叠加 
        ret = md5_obj.hexdigest()
        print(ret)
    get_file_md5('D:骑士计划第五周Day25课堂代码.py')

    视频文件的校验

    1、以rb的形式来读,读出来的是bytes

    2、并且不能按行读,也不能一次性读出来

    3、getsize()-->字节大小

    import os
    import hashlib
    def get_file_md5(file_path,buffer = 1024):
        md5_odj = hashlib.md5()
        file_size = os.path.getsize(file_path)
        with open(file_path,'rb') as f:
            while file_size:
                content = f.read(buffer)        # 读1024个bytes类型的字节
                file_size -= len(content)
                md5_odj.update(content)
        return md5_odj.hexdigest()
    print(get_file_md5(r'D:Python视屏资料day25video选课系统讲解4.mp4'))


  • 相关阅读:
    PHP中单引号与双引号的区别分析
    utf8_unicode_ci与utf8_general_ci的区别
    [mysql-Ver5.6.23] windows版my.ini配置
    Gateway/Worker模型 数据库使用示例
    php 字符串 以 开头 以结尾 startWith endWith
    MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server
    vim变ide
    在Vue中使用样式
    Vue指令之`v-model`和`双向数据绑定
    Vue指令之事件修饰符
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9600463.html
Copyright © 2020-2023  润新知