这篇文章分享的是关于python hashlib模块的内容,会从hashlib的定义和特点、hash对象的方法、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.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'
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模块的内容介绍,上述示例有一定的借鉴价值,有需要的朋友可以看看,希望大家阅读完这篇文章能有所收获。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
长按识别二维码并关注微信
更方便到期提醒、手机管理