深入了解python中的hashlib模块

本篇文章给大家分享的内容是深入了解python中的hashlib模块 ,有着一定的参考价值,有需要的朋友可以参考一下

hashlib

hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法

具体应用

#!/usr/bin/env python# -*- coding: UTF-8 -*-#pyversion:python3.5#owner:fuzjimport hashlib# ######## md5 ########string = "beyongjie"md5 = hashlib.md5()md5.update(string.encode('utf-8'))     #注意转码res = md5.hexdigest()print("md5加密结果:",res)# ######## sha1 ########sha1 = hashlib.sha1()sha1.update(string.encode('utf-8'))res = sha1.hexdigest()print("sha1加密结果:",res)# ######## sha256 ########sha256 = hashlib.sha256()sha256.update(string.encode('utf-8'))res = sha256.hexdigest()print("sha256加密结果:",res)# ######## sha384 ########sha384 = hashlib.sha384()sha384.update(string.encode('utf-8'))res = sha384.hexdigest()print("sha384加密结果:",res)# ######## sha512 ########sha512= hashlib.sha512()sha512.update(string.encode('utf-8'))res = sha512.hexdigest()print("sha512加密结果:",res)

登录后复制

输出结果:

md5加密结果: 0e725e477851ff4076f774dc312d4748sha1加密结果: 458d32be8ea38b66300174970ab0a8c0b734252fsha256加密结果: 1e62b55bfd02977943f885f6a0998af7cc9cfb95c8ac4a9f30ecccb7c05ec9f4sha384加密结果: e91cdf0d2570de5c96ee84e8a12cddf16508685e7a03b3e811099cfcd54b7f52183e20197cff7c07f312157f0ba4875bsha512加密结果: 3f0020a726e9c1cb5d22290c967f3dd1bcecb409a51a8088db520750c876aaec3f17a70d7981cd575ed4b89471f743f3f24a146a39d59f215ae3e208d0170073

登录后复制

注意:hashlib 加密啊的字符串类型为二进制编码,直接加密字符串会报如下错误:

sha1 = hashlib.sha1()sha1.update(string)res = sha1.hexdigest()print("sha1加密结果:",res)TypeError: Unicode-objects must be encoded before hashing

登录后复制

可以使用encode进行转换

shaa1 = hashlib.sha1()shaa1.update(string.encode('utf-8'))res = shaa1.hexdigest()print("sha1采用encode转换加密结果:",res)

登录后复制

或者使用byte转换为二进制

shab1 = hashlib.sha1()shab1.update(bytes(string,encoding='utf-8'))res = shab1.hexdigest()print("sha1采用byte转换的结果:",res)

登录后复制

以上输出:

sha1采用encode转换加密结果: 458d32be8ea38b66300174970ab0a8c0b734252fsha1采用byte转换的结果: 458d32be8ea38b66300174970ab0a8c0b734252f

登录后复制

这里写一个利用md5进行用户登陆网站进行注册之后密码加密的基本事例,加深理解

#hashlib简单使用def md5(arg):#这是加密函数,将传进来的函数加密    md5_pwd = hashlib.md5(bytes('abd',encoding='utf-8'))    md5_pwd.update(bytes(arg,encoding='utf-8'))    return md5_pwd.hexdigest()#返回加密的数据def log(user,pwd):#登陆时候时候的函数,由于md5不能反解,因此登陆的时候用正解    with open('db','r',encoding='utf-8') as f:        for line in f:            u,p=line.strip().split('|')            if u ==user and p == md5(pwd):#登陆的时候验证用户名以及加密的密码跟之前保存的是否一样                return Truedef register(user,pwd):#注册的时候把用户名和加密的密码写进文件,保存起来    with open('db','a',encoding='utf-8') as f:        temp = user+'|'+md5(pwd)        f.write(temp) i=input('1表示登陆,2表示注册:')if i=='2':    user = input('用户名:')    pwd =input('密码:')    register(user,pwd)elif i=='1':    user = user = input('用户名:')    pwd =input('密码:')    r=log(user,pwd)#验证用户名和密码    if r ==True:        print('登陆成功')    else:        print('登陆失败')else:    print('账号不存在')

登录后复制

  这里只简单写了一个用户的注册以及登陆

常用方法

hash.update(arg) 更新哈希对象以字符串参数, 注意:如果同一个hash对象重复调用该方法,则m.update(a); m.update(b) 等效于 m.update(a+b),看下面例子

m = hashlib.md5()m.update('a'.encode('utf-8'))res = m.hexdigest()print("第一次a加密:",res)m.update('b'.encode('utf-8'))res = m.hexdigest()print("第二次b加密:",res)m1 = hashlib.md5()m1.update('b'.encode('utf-8'))res = m1.hexdigest()print("b单独加密:",res)m2 = hashlib.md5()m2.update('ab'.encode('utf-8'))res = m2.hexdigest()print("ab单独加密:",res)输出结果:第一次a加密: 0cc175b9c0f1b6a831c399e269772661第二次b加密: 187ef4436122d1cc2f40dc2b92f0eba0b单独加密: 92eb5ffee6ae2fec3ad71c777531578fab单独加密: 187ef4436122d1cc2f40dc2b92f0eba0

登录后复制

hash.digest() 返回摘要,作为二进制数据字符串值,

hash.hexdigest() 返回摘要,作为十六进制数据字符串值,

hash.copy() 复制

高级加密

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

low = hashlib.md5()low.update('ab'.encode('utf-8'))res = low.hexdigest()print("普通加密:",res)high = hashlib.md5(b'beyondjie')high.update('ab'.encode('utf-8'))res = high.hexdigest()print("采用key加密:",res)输出结果:普通加密: 187ef4436122d1cc2f40dc2b92f0eba0采用key加密: 1b073f6b8cffe609751e4c98537b7653

登录后复制

 

附加HMAC-SHA1各语言版本实现

在各大开放平台大行其道的互联网开发潮流中,调用各平台的API接口过程中,无一例外都会用到计算签名值(sig值)。而在各种计算签名的方法中,经常被采用的就是HMAC-SHA1,现对HMAC-SHA1做一个简单的介绍:        HMAC,散列消息鉴别码,基于密钥的Hash算法认证协议。实现原理为:利用已经公开的Hash函数和私有的密钥,来生成固定长度的消息鉴别码;        SHA1、MD5等Hash算法是比较常用的不可逆Hash签名计算方法;        BASE64,将任意序列的8字节字符转换为人眼无法直接识别的符号编码的一种方法;        各个语言版本的实现为:        Python版:                      import hmac                                            import hashlib                                            import base64              hmac.new(Token,data,hashlib.sha1).digest().encode('base64').rstrip()Token:即接口的keydata:要加密的数据        PHP版:              base64_encode(hash_hmac("SHA1",clientStr,Token , true))          C++版(Openssl):               HMAC(  EVP_sha1(),                                                 /*key data*/ strKey.data(),                                          /*key len*/  strKey.size(),                                          /*data  */(unsigned char*) strRandom.data(),                                          /*data len*/ strRandom.size(), digest, &digest_len))       Shell版:              echo -n '3f88a95c532bea70' | openssl dgst -hmac '123' -sha1 -binary | base64

登录后复制

以上就是深入了解python中的hashlib模块的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2264139.html

(0)
上一篇 2025年2月27日 08:00:55
下一篇 2025年2月27日 08:01:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python开发中module模块用法实例分析

    本文实例讲述了python开发中module模块用法。分享给大家供大家参考,具体如下: 在python中,我们可以把一些功能模块化,就有一点类似于java中,把一些功能相关或者相同的代码放到一起,这样我们需要用的时候,就可以直接调用了 这样…

    编程技术 2025年3月5日
    200
  • 常见的Python模块有哪些

    Python是一种功能强大且灵活的编程语言,其广泛使用的一个原因是其丰富的标准库和第三方模块。在本文中,我将介绍一些常用的Python模块,并提供一些具体的代码示例,便于读者理解和应用。 datetime模块datetime模块提供了处理日…

    2025年3月5日
    200
  • python模块restful使用方法实例

    RESTful架构,目前是比较流行的一种互联网软件架构。REST,即Representational State Transfer的缩写。 说白点就是网站即软件,再白点就是一个服务软件支持http的四种方法: GET用来获取资源,POST用…

    2025年2月27日
    200
  • python中的模块

    模块:随着程序变的越来越大 为了便于维护 需要把它分为多个文件 为此python允许把定义放入一个文件 然后在其他脚本中将其作为模块导入  创建模块: 将相关的语句和定义放入与模块同名的文件中  #file:module.py  def n…

    编程技术 2025年2月27日
    200
  • python模块导入实现你需要的功能

    模块让你能够有逻辑地组织你的python代码段。 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。 模块也是Python对象,具有随机的名字属性用来绑定或引用。 简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,…

    编程技术 2025年2月27日
    200
  • 详解离线安装db2的python模块ibm_db方法

    linux为centos6.5-64位,suse 11-64位 都能成功 1、为什么要离线安装     没网,在银行工作,服务器环境配置,完全离线(本来五分钟搞定的事情,非要搞一天。我服!!) 2、需要的附件及操作步骤     1.下载ib…

    编程技术 2025年2月27日
    200
  • hashlib模块之加密的介绍

      用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 算法 import hashlibm = hashlib.md5()m.update…

    编程技术 2025年2月27日
    200
  • python模块是什么?写法及作用分析

    在这篇文章之中我们来了解一下python这门编程语言之中的模块。刚刚接触这门语言的朋友可能并不懂python中的模块这个概念是什么意思。那么这篇文章就来带大家来认识一下模块。我们首先要知道python模块是什么,然后我们需要知道python…

    编程技术 2025年2月27日
    200
  • Python中的模块是什么?

    python是一种非常流行的编程语言,很多人都在学习和使用它。而在python中,模块是一个非常重要的概念。那么什么是python中的模块呢?为什么我们需要使用模块?下面我们来详细解答这些问题。 一、什么是Python中的模块? 在Pyth…

    编程技术 2025年2月26日
    300
  • 如何解决Python的模块无法读取错误?

    在编写python代码时,我们常常需要导入外部模块。但是有时候会出现模块无法读取的错误,阻碍了我们的编程进程。这些错误一般有以下几种情况和解决方法。 模块未安装或未添加到系统路径中 当我们导入模块时,Python会在系统路径中寻找该模块。如…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论