• hashlib模块 md5 sha1


    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等
    它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

    对于同一个字符串,不管这个字符串有多长,只要是相同的,
    无论在任何环境下,多少次执行,在任何语言中
    使用相同的算法相同的手段得到的结果永远是相同的
    只要不是相同的字符串,得到的结果一定不同

    md5算法,32位的字符串,每个字符都是一个十六进制
    md5算法 效率快 算法相对简单   需要进行加盐操作

    用法  :

    1.先创建一个对象

    2.对象.update('字符串'.encode=('utf-8'))

    3.print(对象.hexdigest())

    s1 = 'ben'  # 7fe4771c008a22eb763df47d19e2c6aa
    s2 = 'abc123'  # c203eb9f0cdbe64ec22e214b759b7ba3
    
    md5_obj = hashlib.md5()  # 1.先创建一个对象
    md5_obj.update(s1.encode('utf-8'))  # 2. update(对象.编码格式)
    res = md5_obj.hexdigest()  # 3. 给一个变量接收 对象.hexdigest()
    print(res, len(res), type(res))  # 得到md5值
    
    md5_obj.update(s2.encode('utf-8'))
    res2 = md5_obj.hexdigest()
    print(res2, len(res2), type(res2))
    

    小小的输入生成md5的程序

    def md5(name):
        name_obj = hashlib.md5()
        name_obj.update(name.encode('utf-8'))
        ret = name_obj.hexdigest()
    
        return ret
    
    
    name = input('请输入你的名字>>>')
    my_md5 = md5(name)
    print(my_md5)
    

    加盐

    可能会撞库,所以必须进行加盐

    def md5(name):
        name_obj = hashlib.md5()
        name_obj.update((name + name).encode('utf-8'))  # 可以给想加密的东西再加上别的字符
        ret = name_obj.hexdigest()
    
        return ret
    
    
    name = input('请输入你的名字>>>')
    my_md5 = md5(name)
    print(my_md5)
    

     动态加盐

    username = input('username : ')
    passwd = input('password : ')
    md5obj = hashlib.md5(username.encode('utf-8'))
    md5obj.update(passwd.encode('utf-8'))
    print(md5obj.hexdigest())
    

    文件的一致性校验 利用md5值是否相同来判断

    md5_obj = hashlib.md5()
    with open('5.序列化模块_shelve.py', 'rb') as f:
        md5_obj.update(f.read())
        ret1 = md5_obj.hexdigest()
    
    md5_obj = hashlib.md5()
    with open('5.序列化模块_shelve.py.bak', 'rb') as f:
        md5_obj.update(f.read())
        ret2 = md5_obj.hexdigest()
    print(ret1, ret2)
    

    弱文件太大, 内存读不下, 可以:
    按行读: 文本, 视频, 音乐, 图片, bytes
    按字节读: 10240 = 1M

    md5 = hashlib.md5()
    md5.update('hello,world,wow'.encode('utf-8'))
    ret = md5.hexdigest()
    print(ret)  # f733a03f0f1caac0b7ac905f25bf4fd2
    
    md5 = hashlib.md5()
    md5.update('hello,'.encode('utf-8'))
    md5.update('world,'.encode('utf-8'))
    md5.update('wow'.encode('utf-8'))
    ret = md5.hexdigest()
    print(ret)
    

    大文件的已执行校验 

    循环的读取文件内容

    循环的来update

    md5_obj = hashlib.md5()
    
    with open('file', 'rb') as f:
        md5_obj.update(f.read())
        # 循环的读取文件内容
        # 循环的来update
    print(md5_obj.hexdigest())
    

    sha1也是一个算法, 40位的字符串, 每个字符都是一个十六进制 算法相对复杂 计算速度也慢 用的人少,所以会比md5更安全一点 和md5用法一样

    sha_obj = hashlib.sha1()
    sha_obj.update(s1.encode('utf-8'))
    res = sha_obj.hexdigest()
    print(res, len(res), type(res))
    

    小练习

    # 写成一个函数
    # 参数 : 文件1的路径,文件2的路径,默认参数 = 1024000
    # 计算这两个文件的md5值
    # 返回它们的一致性结果 T/F
    
  • 相关阅读:
    axios拦截器
    Vue路由守卫
    HTML横向滚动条和文本超出显示三个小圆点
    Vue用户名vuex和localStorage双向存储
    javaScript Es6数组与对象的实例方法
    使用vue实现复选框单选多选
    正则表达式常用字符
    jest函数单元测试
    ts中的类
    ts中接口的用法
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9452336.html
Copyright © 2020-2023  润新知