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

    1.什么是hash?

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

    如果把hash算法比作一个工厂,那么给hash算法的内容就是原材料,生成的hash值就是得到的产品。

    2.为何使用hash算法?

    hash值有三大特性:

        1.只要传入的内容一样,得到的hash值必然是固定的。

        2.只要使用的hash算法是一样的,不论传入多大的内容,hash值长度都是固定的。

        3.不可用hash值逆推出原来的内容。

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

    基于1和3可以对密码进行加密——> 登陆时密码hash 将获得的hash值传给数据库,数据库调用用户名和对应的hash值做比较,一样则让用户登陆。hash不可逆推,就算被截获也得不出密码。

    3 怎么用hash?

    例子用的是MD5加密 (还有sha512加密等)

    import hashlib

    #1、造出hash工厂
    m=hashlib.md5()

    #2、运送原材料
    m.update('你好啊美丽的'.encode('utf-8'))
    m.update('张铭言'.encode('utf-8'))

    #3、产出hash值
    print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9

    上下两个hash值是一样的,传入的内容是一样的
    #1、造出hash工厂
    m=hashlib.md5('你'.encode('utf-8'))

    #2、运送原材料
    m.update('好啊美丽的张铭言'.encode('utf-8'))

    #3、产出hash值
    print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9


    在不同目录下相同的内容得到的hash值相同
    文件的一致性校验
    #1、造出hash工厂
    m=hashlib.md5()

    #2、运送原材料
    with open(r'E:1.mp4','rb') as f:
    for line in f:
    m.update(line) # 文件过大不能用m.update(f.read())
    #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


    # 加盐算法
    import hmac,hashlib
    # m = hmac.new(key,msg,digestmod="MD5")

    m=hmac.new('小鸡炖蘑菇'.encode('utf-8'),digestmod="MD5") # 后面不加默认是MD5加密
    m.update('hello'.encode('utf-8'))
    print(m.hexdigest()) # 38a608c5c394dfd4d4a882415cc1024e

  • 相关阅读:
    第二篇:服务消费者Feign
    第一篇:服务的注册与发现Eureka(Finchley版本)
    记一次包扫描的犯错
    0.简单工厂-simplefactory(非23之一)
    设计模式基础
    设计模式--六大设计原则
    Java中的包
    Java内部类
    Java多线程
    Java同步
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9224427.html
Copyright © 2011-2022 走看看