美文网首页python 集
python 常用内建模块之hmac

python 常用内建模块之hmac

作者: Swift社区 | 来源:发表于2019-07-29 10:43 被阅读37次

python学习笔记,特做记录,分享给大家,希望对大家有所帮助。

hmac

通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口令是否正确,我们用保存在数据库中的password_md5对比计算md5(password)的结果,如果一致,用户输入的口令就是正确的。

为了防止黑客通过彩虹表根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样,大大增加了黑客破解的难度。

如果salt是我们自己随机生成的,通常我们计算MD5时采用md5(message + salt)。但实际上,把salt看做一个“口令”,加salt的哈希就是:计算一段message的哈希时,根据不通口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。

这实际上就是Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。

和我们自定义的加salt算法不同,Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

Python自带的hmac模块实现了标准的Hmac算法。我们来看看如何使用hmac实现带key的哈希。

我们首先需要准备待计算的原始消息message,随机key,哈希算法,这里采用MD5,使用hmac的代码如下:

import hmac

message = b'Hello, world!'
key = b'secret'
h = hmac.new(key, message, digestmod='MD5')
# 如果消息很长,可以多次调用h.update(msg)
print h.hexdigest()

运行结果:

fa4ee7d173f2d97ee79022d1a7355bcf

Process finished with exit code 1

可见使用hmac和普通hash算法非常类似。hmac输出的长度和原始哈希算法的长度一致。需要注意传入的key和message都是bytes类型,str类型需要首先编码为bytes。

相关文章

  • python 常用内建模块之hmac

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 hmac 通过哈希算法,我们可以验证一段数据是否...

  • Python常用模块

    Python常用模块之time模块 Python常用模块之os模块 Python常用模块之sys模块 Python...

  • python 模块psutil获取进程信息

    获取进程信息 接续上篇《python 常用内建模块之psutil》安装psutil,并且获取一些基本信息,本篇介绍...

  • hmac

    Python自带的hmac模块实现了标准的Hmac算法。和我们自定义的加salt算法不同,Hmac算法针对所有哈希...

  • python 常用内建模块之requests

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 安装requests 1. pip安装reque...

  • python 常用内建模块之chardet

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 字符串编码一直是令人非常头疼的问题,尤其是我们在...

  • python 常用内建模块之psutil

    用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时...

  • python 常用内建模块之HTMLParser

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 HTMLParser 如果我们要编写一个搜索引擎...

  • python 常用内建模块之Pillow

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 Pillow PIL:Python Imagin...

  • python 常用内建模块之XML

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 XML虽然比JSON复杂,在Web中应用也不如以...

网友评论

    本文标题:python 常用内建模块之hmac

    本文链接:https://www.haomeiwen.com/subject/yqyclctx.html