• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python基础之hashlib模块详解

    一、hashlib简介

    1.什么叫hash:

    hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值

    2.hash值的特点是(hash值/产品有三大特性:):

    MD5是最常见的摘要算法,速度很快,生成结果是固定的16字节,通常用一个32位的16进制字符串表示。SHA1算法更安全点,它的结果是20字节长度,通常用一个40位的16进制字符串表示。而比SHA1更安全的算法是SHA256和SHA512等等,不过越安全的算法越慢,并且摘要长度更长

    二、hash对象的方法

    hash.update(arg)
    更新hash对象。连续的调用该方法相当于连续的追加更新。例如m.update(a); m.update(b)相当于m.update(a+b)。注意,当数据规模较大的时候,Python的GIL在此时会解锁,用于提高计算速度。
    一定要理解update()的作用,由于消息摘要是只针对当前状态产生的,所以每一次update后,再次计算hexdigest()的值都会不一样。
     
    hash.digest()
    返回bytes格式的消息摘要
     
    hash.hexdigest()
    与digest方法类似,不过返回的是两倍长度的字符串对象,所有的字符都是十六进制的数字。通常用于邮件传输或非二进制环境中。通常我们比较摘要时,比较的就是这个值!
     
    hash.copy()
    返回一个hash对象的拷贝
    
    hashlib.new(name[, data])
    一个通用的构造方法,name是某个算法的字符串名称,data是可选的bytes类型待摘要的数据。
    
    >>> h = hashlib.new('sha256',b"haha")
    >>> h.hexdigest()
    '090b235e9eb8f197f2dd927937222c570396d971222d9009a9189e2b6cc0a2c1'
    

    三、hashlib实际操作

    1)在进行md5哈希运算前,需要对数据进行编码,否则报错

    import hashlib
    obj = hashlib.md5()   #构造一个hashlib的对象
    obj.update("小马过河")  #update对指定字符串进行加密
    print(obj)           
    --------------结果:
      obj.update("小马过河")
    TypeError: Unicode-objects must be encoded before hashing
    

    2)obj是hash对象

    import hashlib
    obj = hashlib.md5()
    obj.update("小马过河".encode("utf-8"))
    print(obj,type(obj))
    -------------------结果:
    md5 HASH object @ 0x001C5590> class '_hashlib.HASH'>
    

    3)得到字符串

    import hashlib
    obj = hashlib.md5()
    obj.update("小马过河".encode("utf-8"))
    result=obj.hexdigest()
    print(result)
    --------------结果:
    24f67b0f6d02adc8867d612e0e0fc40a
    

    4)给加密增添难度

    import hashlib
    obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8"))  #添加一些内容,提高加密复杂度。此处的字符串也要先编码,
    obj.update("小马过河".encode('utf-8'))
    result = obj.hexdigest()
    print(result)
    -------------------结果:
    b11740508f28e04837f2c0e3a58cf990
    

    5)用hashlib做成加密函数(添加基础的字符了的)

    import hashlib
    def get_md5(data):   #传参为需要加密的字符串
        obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
        obj.update(data.encode('utf-8'))
        result = obj.hexdigest()          
        return result
    val = get_md5('123')
    print(val)
    --------------结果:
    35093270b6352fa9721370b781f7b4d7
    

    四、小小案例

    import hashlib
    USER_LIST = []
    def get_md5(data):
        obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
        obj.update(data.encode('utf-8'))
        result = obj.hexdigest()
        return result
    def register():
        print('**************用户注册**************')
        while True:
            user = input('请输入用户名:')
            if user == 'N':
                return
            pwd = input('请输入密码:')
            temp = {'username':user,'password':get_md5(pwd)}
            USER_LIST.append(temp)
    def login():
        print('**************用户登陆**************')
        user = input('请输入用户名:')
        pwd = input('请输入密码:')
    
        for item in USER_LIST:
            if item['username'] == user and item['password'] == get_md5(pwd):
                return True
    register()
    result = login()
    if result:
        print('登陆成功')
    else:
        print('登陆失败')
    ------------------------结果:
    **************用户注册**************
    请输入用户名:小马过河
    请输入密码:123456
    请输入用户名:N
    **************用户登陆**************
    请输入用户名:小马过河
    请输入密码:123456
    登陆成功
    

    到此这篇关于Python基础之hashlib模块详解的文章就介绍到这了,更多相关Python hashlib模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 在python中实现导入一个需要传参的模块
    • python文件目录操作之os模块
    • Python使用scapy模块发包收包
    • Python collections模块的使用技巧
    • Python使用random模块实现掷骰子游戏的示例代码
    • Python爬虫基础之requestes模块
    • python常见模块与用法
    • python中sys模块的介绍与实例
    • Python中os模块的简单使用及重命名操作
    • python基于concurrent模块实现多线程
    • python xlwt模块的使用解析
    • Pyhton模块和包相关知识总结
    上一篇:用Python爬虫破解滑动验证码的案例解析
    下一篇:Python中常见的导入方式总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python基础之hashlib模块详解 Python,基础,之,hashlib,模块,