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

    一,什么是hash?

    hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值。

    二,hash值的特点是:

    1.只要传入的内容一样,得到的hash值必然一样。————》要用明文传输密码文件完整性校验。

    2.不能由hash值反解成内容。

    3.只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的。

    基于1和2可以在下载文件时做文件一致性校验。

    基于1和3可以对密码进行加密。

    比喻:

    hash算法就像是一座工厂,工厂接收你送来的原材料,(可以用m.update()为工厂运送原材料),经过加工返回的产品就是hash值。

    操作如下:

    import hashlib
    m=hashlib.md5() #搞定算法
    m.update('你fxc'.encode('utf-8')) #传入原材料
    print(m.hexdigest()) #得到hash值。

    3、如何用
    '''
    import hashlib

    # #1、造出hash工厂
    # m=hashlib.md5()
    #
    # #2、运送原材料
    # m.update('你好啊美丽的'.encode('utf-8'))
    # m.update('张铭言'.encode('utf-8'))
    #
    # #3、产出hash值
    # print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9


    # #1、造出hash工厂
    # m=hashlib.md5('你'.encode('utf-8'))
    #
    # #2、运送原材料
    # m.update('好啊美丽的张铭言'.encode('utf-8'))
    #
    # #3、产出hash值
    # print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9


    三。应用一:文件一致性校验

    # #1、造出hash工厂
    # m=hashlib.sha512('你'.encode('utf-8'))
    #
    # #2、运送原材料
    # m.update('好啊美sadfsadf丽asdfsafdasdasdfsafsdafasdfasdfsadfsadfsadfsadfasdff的张铭言'.encode('utf-8'))
    #
    #
    # #3、产出hash值
    # print(m.hexdigest()) #2ff39b418bfc084c8f9a237d11b9da6d5c6c0fb6bebcde2ba43a433dc823966c


    # #1、造出hash工厂
    # m=hashlib.md5()
    #
    # #2、运送原材料
    # with open(r'E:1.mp4','rb') as f:
    # for line in f:
    # m.update(line)
    # #3、产出hash值
    # print(m.hexdigest()) #1273d366d2fe2dc57645cc1031414a05
    # # 1273d366d2fe2dc57645cc1031414a05


    # 应用二:对明文密码进行加密
    # password=input('>>>: ')
    #
    # m=hashlib.md5()
    # m.update('天王盖地虎'.encode('utf-8'))
    # m.update(password.encode('utf-8'))
    # print(m.hexdigest()) #95bd6eafefdf51d8b153785f3fb6263d



    注意:
    把一段很长的数据update多次,与一次update这段长数据,得到的结果是一样的。但是update多次为校验大文件提供了可能。

    以上加密算法虽然依然非常厉害,但有时候存在缺陷,即通过撞库可以反解。所以有必要对加密算法中添加自定义key再来做加密。


    模拟撞库破解密码:
    import hashlib
    passwds=[
    'alex3714',
    'alex1313',
    'alex94139413',
    'alex123456',
    '123456alex',
    'a123lex',
    ]
    def make_passwd_dic(passwds):
    dic={}
    for passwd in passwds:
    m=hashlib.md5()
    m.update(passwd.encode('utf-8'))
    dic[passwd]=m.hexdigest()
    return dic

    def break_code(cryptograph,passwd_dic):
    for k,v in passwd_dic.items():
    if v == cryptograph:
    print('密码是===>33[46m%s33[0m' %k)

    cryptograph='aee949757a2e698417463d47acac93df'
    break_code(cryptograph,make_passwd_dic(passwds))

  • 相关阅读:
    结对第二次作业——某次疫情统计可视化的实现
    结对作业(1)--疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    Prometheus监控docker容器(三)
    Prometheus数据持久化存储(二)
    HTTPS SSL证书在线生成
    从零搭建Prometheus监控报警系统(一)
    Ubuntu 16.04 误删内核后的系统恢复
    通过URL触发Jenkins构建
  • 原文地址:https://www.cnblogs.com/fxc-520520/p/9224763.html
Copyright © 2011-2022 走看看