龙空技术网

Python 模块 hmac-加密消息签名和验证

许良alex 237

前言:

此时姐妹们对“在python中用户名与密码验证”大体比较讲究,各位老铁们都需要分析一些“在python中用户名与密码验证”的相关内容。那么小编同时在网上收集了一些有关“在python中用户名与密码验证””的相关内容,希望大家能喜欢,小伙伴们快快来学习一下吧!

模块 hmac 实现了消息验证的哈希算法(RFC-2104--HMAC Keyed-Hashing for a Message Authentication)。

HMAC 算法用于验证在不同的应用之间传输的数据的一致性,或者是存放于危险位置的数据。

办法是使用一个 secret key 和数据生成一个加密的哈希值,当验证数据时,只需要重新生成哈希值并验证前后的两个哈希值相等。

生成哈希值

使用 new() 函数创建一个对象然后写入数据生成签名,签名默认使用的是 MD5 算法。

执行:

hmac.new() 第一个参数是自定义的 secret key。

Base 64 格式

上例中,调用方法 hexdigest() 返回 digest() 的16进制表示,digest() 生成的是二进制数据,可能包含不可打印的字符,包括 NUL。也可以把二进制数据转换为 base64 编码的数据表示。

执行:

应用消息签名

HMAC 应该始终在公共网络上应用,保证数据的安全是至关重要的。例如发送一段数据到一个管道 Pipe 或者 Socket,数据就应该签名,然后在使用之前进行验证。

下面的例子使用 io.BytesIO 模拟一个管道或者 Socket,加密生成的哈希值和数据通过模拟的数据流后,然后进行了验证。

首先定义传递的数据对象,使用模块 pickle 进行对象的序列化操作。

首先定义了生成数据的类 TestData 和函数 make_digest() 生成签名,本例使用的签名算法是 SHA1。下一步使用 io.BytesIO 生成数据流表示管道或者 Socket,序列化对象使用模块 pickle。

执行:

使用模块 pickle 序列化对象后,将返回的字节流生成签名,然后把签名和数据写入输出流。最后从输出流获取数据,验证并打印结果。

比较签名使用的是 compare_digest() 函数,它实现了快速的比较速度以及有效避免时间攻击。

标签: #在python中用户名与密码验证 #pythonsocket序列化