跳到主要内容

1.2 Hashlib 模块API手册

前言

概述

本文档主要介绍 CanMV 项目中加解密算法库-uhashlib。

读者对象

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师
  • 软件开发工程师

缩略词定义

简称说明
SHA1Secure Hash Algorithm 1
SHA2Secure 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