python3 hashlib.md5使用总结

hash(散列函数)的百科

hash(散列函数)百科 :(https://baike.baidu.com/item/Hash/390310?fr=aladdin)

python3中使用hash()函数

  • python3中使用hash()函数大体分为两种方式:
    1.使用python3自带的hash函数;
    2.使用第三方hash库中的函数。
  • 对于不同的处理内容,选择方案也有所区别,比如对字符串和图片做哈希处理时需要进行的编码处理方式就稍有区别,下面我们具体来看。

python3自带的hash()函数

废话不多说,先来看代码:

  • 基本使用方法
>>> hash(123456)
123456
>>> hash('123456')
-1939021130
>>> hash('abcdef')
995066358

python3自带的hash()函数不需要import,可以直接使用。

  • 存在的局限性问题
    python3自带的hash()函数在不同终端窗口,对同一个内容得到的哈希值不同。
    也就是说,同样的字符串,在终端中,关闭终端后重新打开再次运行hash()函数,得到的是两个哈希值;而对于写好的python文件,运行两次能够得到两个哈希值,运行多次得到多个哈希值,效果如下:
C:\Users\pc>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> hash('12345')
-1632335623
>>> ^Z

C:\Users\pc>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> hash('12345')
1383201171
>>> ^Z

C:\Users\pc>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> hash('12345')
1544562322
>>>

由于上述问题的存在,python3自带的hash()函数很难用于哈希值重复使用,比如基于哈希判断等等。

第三方hash库函数

推荐使用hashlib库的md5摘要算法
详见廖老师博客:https://www.liaoxuefeng.com/wiki/1016959663602400/1017686752491744

使用方法如下:

1.针对字符串   
import hashlib  
data = 'this is a string'  
hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()  

2.针对图片文件(图片的二进制数据)  
with open("./test.jpg", "rb") as file:  
	image = file.read()  
	print(hashlib.md5(image).hexdigest())  

运行结果:

>>> import hashlib
>>> data = 'this is a string'
>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()
'b37e16c620c055cf8207b999e3270e9b'
>>>

总结

  1. python3自带hash()函数不同终端窗口不一致;
  2. 第三方库hashlib.md5摘要算法用途更广更方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值