1.2 Hashlib 模块API手册
前言
概述
本文档主要介绍 CanMV 项目中加解密算法库-uhashlib。
读者对象
本文档(本指南)主要适用于以下人员:
- 技术支持工程师
- 软件开发工程师
缩略词定义
简称 | 说明 |
---|---|
SHA1 | Secure Hash Algorithm 1 |
SHA2 | Secure Hash Algorithm 2 |
修订记录
文档版本号 | 修改说明 | 修改者 | 日期 |
---|---|---|---|
V1.0 | 初版 | 杨帆 | 2023-09-15 |
V1.1 | 修改示例程序,新增使用指南 | 杨帆 | 2023-10-10 |
V1.2 | 增加 SHA1 和 MD5 软件源生实现 | 杨帆 | 2023-10-13 |
1. 概述
Uhashlib 库提供了基于 MD5、SHA1、SHA2 二进制数据的哈希算法。
2. API描述
Uhashlib 库提供了三个类:md5、sha1 和 sha256,这些类分别实现了两个函数,数据更新函数 update(),消息摘要函数 digest()。其中,md5 和 sha1 是 micropython 的软件源生实现;sha256 由底层硬件加速器进行加速。
注意:本文档不会介绍 md5 和 sha1 详细步骤,具体请参考 micropython [hash官方文档] https://docs.micropython.org/en/latest/library/hashlib.html
2.1 类 sha256
【描述】
类 sha256 用于创建一个 SHA256 哈希对象,并有选择地向其中发送数据。
【语法】
uhashlib.sha256([data])
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
data(可选) | 二进制数据 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败 |
【注意】
无
【举例】
data = bytes([0]*64)
hash_obj = uhashlib.sha256(data)
hash_obj.update(data)
dgst = hash_obj.digest()
print(dgst)
【相关主题】
无
2.1.1 数据更新函数 update()
【描述】
如果需要多次输入二进制数据,可以调用 update() 函数更新数据。
【语法】
obj.update(data)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
data | 输入二进制数据 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败 |
【注意】
无
【举例】
无
【相关主题】
无
2.1.2 消息摘要函数 digest()
【描述】
返回所有输入数据的哈希值。
注意:在micropython中,使用此函数会完成最后的计算,不是单纯的将结果显示出来,所以只能调用一次,如果要多次使用该值,请保存到变量中。
【语法】
dgst = hash.digest()
print(dgst)
/*********** note ***********/
a = hash.digest()
b = hash.digest() # Error
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非 0 | 失败 |
【注意】
无
【举例】
无
【相关主题】
无
2.1.3 十六进制消息摘要函数 hexdigest()
该方法未实现。使用 binascii.hexlify(hash.digest()) 可以达到类似的效果。
3. 示例程序
计算 hash 值
import uhashlib
import binascii
# init sha256 obj
obj = uhashlib.sha256()
# input data1
obj.update(b'hello')
# input data2
obj.update(b'world')
# compute digest
dgst = obj.digest()
print(binascii.hexlify(dgst))
# b'936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af'
4. 使用指南
截止到当前版本,uhashlib 库已经测试了下列 case。测试程序参考 ./tests/cipher/cipher.py,启动 canmv 开发板,进入 REPL 之后,通过命令 import sdcard.app.tests.cipher.cipher 可直接运行测试 demo。
类 | 测试 case | 测试结果 |
---|---|---|
uhashlib | 调用一次 update() 更新数据 | pass |
uhashlib | 调用多次 update() 更新数据 | pass |