hmac

HMAC 是用于消息认证的加密哈希算法,全称是 keyed-Hash Message Authentication Code。HMAC 利用哈希算法,以一个密钥和一个消息作为输入,生成一个加密串作为输出。HMAC 可以有效防止类似 MD5 的彩虹表等攻击,比如将常见密码的 MD5 值存入数据库,可能被反向破解。

Python 的 hmac 模块提供了 HMAC 算法,它的使用形式是:

hmac.new(key[, msg[, digestmod]])

其中,key 是一个密钥;msg 是消息,可选,如果给出 msg,则调用方法 update(msg);digestmod 是 HMAC 对象使用的摘要构造函数或模块,默认为 hashlib.md5 构造函数。

HMAC 对象常用的方法有:

  • HMAC.update(msg)

用字符串 msg 更新 HMAC 对象,重复的调用等同于一次调用所有参数的组合,即:

m.update(a);
m.update(b);

相当于

m.update(a+b)
  • HMAC.digest()

返回目前传递给 update() 方法的字符串的摘要。此字符串长度将与给构造函数的摘要的 digest_size 相同。它可能包含非 ASCII 字符,包括 NULL 字节。

  • HMAC.hexdigest()

类似 digest(),但是返回的摘要的字符串的长度翻倍,且只包含十六进制数字。

现在,让我们看一个简单的例子:

>>> from datetime import datetime
>>> import hashlib
>>> import hmac

>>> key = 'you-never-know'
>>> msg = datetime.utcnow().strftime('%Y-%m-%d')

>>> m = hmac.new(key, msg, hashlib.sha1)
>>> signature = m.hexdigest()
>>> signature
'fdb2087a66a2f00afbc1884738467ba089782779'

参考资料

results matching ""

    No results matching ""