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'
>>>
总结
- python3自带hash()函数不同终端窗口不一致;
- 第三方库
hashlib.md5摘要算法 用途更广更方便。
|