2020年9月16日 / 18次阅读 / Last Modified 2020年11月9日
工作需要用到计算hash值,python有个hashlib,常用的hash算法它都有。
各个不同的hash算法的使用基本都一样,先创建一个算法对象,然后update一个字符串给这个算法,然后得到hash值。
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update('pynote.net'.encode())
>>> md5.digest()
b'\x93\tz\x10oVt\xbe}H$p\xa7U\xfe\x16'
>>> md5.hexdigest()
'93097a106f5674be7d482470a755fe16'
>>> md5.digest_size
16
>>> len(md5.digest())
16
各种算法对象的接口都基本一样,下面来试试sha256算法:
>>> sha256 = hashlib.sha256()
>>> sha256.update('pynote.net'.encode())
>>> sha256.digest()
b'kV6O\xb8(\xaa=\xc2\xe5\xf6.N\xc4\x7f\x8eB\xb1\x88\xb8\xd2\xf5\xee\x9c\x1c\xfc?\xb0\xfe\xd1\\\xb4'
>>> sha256.hexdigest()
'6b56364fb828aa3dc2e5f62e4ec47f8e42b188b8d2f5ee9c1cfc3fb0fed15cb4'
>>> sha256.digest_size
32
这个坑是hash对象的update函数,它是update,不是赋值,即给同一个hash对象update相同的字符串后,得到的digest不一样,如下:
>>> md5 = hashlib.md5()
>>> md5.update(b'123')
>>> md5.hexdigest()
'202cb962ac59075b964b07152d234b70'
>>> md5.hexdigest()
'202cb962ac59075b964b07152d234b70'
>>> md5.hexdigest()
'202cb962ac59075b964b07152d234b70'
>>> md5.update(b'123')
>>> md5.hexdigest()
'4297f44b13955235245b2497399d7a93'
>>> md5.hexdigest()
'4297f44b13955235245b2497399d7a93'
>>> md5.hexdigest()
'4297f44b13955235245b2497399d7a93'
>>>
>>> sha256 = hashlib.sha256()
>>> sha256.update(b'abc')
>>> sha256.hexdigest()
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
>>> sha256.hexdigest()
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
>>> sha256.hexdigest()
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
>>> sha256.update(b'abc')
>>> sha256.hexdigest()
'bbb59da3af939f7af5f360f2ceb80a496e3bae1cd87dde426db0ae40677e1c2c'
>>> sha256.hexdigest()
'bbb59da3af939f7af5f360f2ceb80a496e3bae1cd87dde426db0ae40677e1c2c'
>>> sha256.hexdigest()
'bbb59da3af939f7af5f360f2ceb80a496e3bae1cd87dde426db0ae40677e1c2c'
>>>
有这么个坑的话,hash对象就只能用的时候再创建。
不清楚hashlib这样设计的原因是啥?
-- EOF --
本文链接:https://www.pynote.net/archives/2487
前一篇:common:个人基础函数库
后一篇:海象操作符(:=)
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记