欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第九章:加密-hmac:密码消息签名与验证-二进制摘要

程序员文章站 2024-03-14 15:04:16
...

9.2.3 二进制摘要
前面的例子使用hexdigest()方法来生成可打印的摘要。hexdigest是digest()方法计算的值的一个不同表示,这是一个二进制,可以包括不可打印的字符(包括NUL)。有些Web服务(Google checkout、Amazon S3)会使用base64编码版本的二进制摘要而不是hexdigest。

import base64
import hmac
import hashlib

with open('lorem.txt','rb') as f:
    body = f.read()

hash = hmac.new(
    b'secret-shared-key-goes-here',
    body,
    hashlib.sha1,
    )

digest = hash.digest()
print(base64.encodestring(digest))

base64编码串以一个换行符结束,在HTTP首部或其他格式敏感的上下文嵌入这个串时,通常需要去除这个换行符。
运行结果:
第九章:加密-hmac:密码消息签名与验证-二进制摘要
提示警告:不建议使用encodestring(),而使用encodebytes()。更改后的代码如下:

import base64
import hmac
import hashlib

with open('lorem.txt','rb') as f:
    body = f.read()

hash = hmac.new(
    b'secret-shared-key-goes-here',
    body,
    hashlib.sha1,
    )

digest = hash.digest()
print(base64.encodebytes(digest))

运行结果:

b’3ETr0pwSMnOBBJr3ihKH4+bW5qs=\n’