hashlib模块的使用

2020年9月16日 / 8次阅读 / 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

hashlib模块有一个坑

这个坑是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

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top