uhashlib 模块 API 手册#

概述#

uhashlib 该模块实现了二进制数据哈希算法。可用算法的具体清单取决于主板。可能实现的算法包括:

  • SHA256 - 当前的现代哈希算法( SHA2 系列)。适用于密码学安全用途。包含在 MicroPython 核心中,任何主板都建议提供该算法,除非它有特定的代码大小限制。

  • SHA1 - 一种上一代算法。不推荐用于新用途,但 SHA1 是某些互联网标准和现有应用程序的一部分,因此针对网络连接性和互操作性的板会尝试提供这个。

  • MD5 - 一种遗留算法,不被认为是加密安全的。只有少数针对与遗留应用程序互操作性的板会提供这个。

具体请参考 MicroPython hash 官方文档

构造函数#

sha256#

描述

创建一个 SHA256 哈希器对象,并可选地将 data 输入到其中。

语法

obj = uhashlib.sha256([data])

参数

参数名称

描述

输入/输出

data (可选)

二进制数据

输入

返回值

返回 SHA256 哈希器对象。

sha1#

描述

创建一个 SHA1 哈希器对象,并可选择将 data 输入到其中。

语法

obj = uhashlib.sha1([data])

参数

参数名称

描述

输入/输出

data (可选)

二进制数据

输入

返回值

返回 SHA1 哈希器对象。

md5#

描述

创建一个 MD5 哈希器对象,并可选择将 data 输入到其中。

语法

obj = uhashlib.md5([data])

参数

参数名称

描述

输入/输出

data (可选)

二进制数据

输入

返回值

返回 MD5 哈希器对象。

哈希器对象方法#

数据更新函数 update()#

描述

将更多二进制数据输入到哈希中。

语法

hash.update(data)

参数

参数名称

描述

输入/输出

data

二进制数据

输入

返回值

消息摘要函数 digest()#

描述

返回通过 hash 传递的所有数据的哈希值,作为一个 bytes 对象。

注意:调用此方法后,无法再向哈希中输入更多数据。

语法

dgst = hash.digest()

参数

返回值

返回通过 hash 传递的所有数据的哈希值。

十六进制消息摘要函数 hexdigest()#

该方法未实现。可以使用 binascii.hexlify(hash.digest()) 达到类似效果。

示例程序#

import uhashlib

print('###################### SHA256 Test ##############################')
print('********************** Test-1: Only Call update() Once ******************')
# 初始化sha256对象
obj = uhashlib.sha256()
# 输入消息message
msg = b'\x45\x11\x01\x25\x0e\xc6\xf2\x66\x52\x24\x9d\x59\xdc\x97\x4b\x73\x61\xd5\x71\xa8\x10\x1c\xdf\xd3\x6a\xba\x3b\x58\x54\xd3\xae\x08\x6b\x5f\xdd\x45\x97\x72\x1b\x66\xe3\xc0\xdc\x5d\x8c\x60\x6d\x96\x57\xd0\xe3\x23\x28\x3a\x52\x17\xd1\xf5\x3f\x2f\x28\x4f\x57\xb8'
# 标准哈希值
dgst0 = b'\x1a\xaa\xf9\x28\x5a\xf9\x45\xb8\xa9\x7c\xf1\x4f\x86\x9b\x18\x90\x14\xc3\x84\xf3\xc7\xc2\xb7\xd2\xdf\x8a\x97\x13\xbf\xfe\x0b\xf1'
# 将消息更新到硬件IP中
obj.update(msg)
# 计算哈希值
dgst = obj.digest()
print(dgst0 == dgst)
# print(binascii.hexlify(dgst))
print('********************** Test-2: Call update() Twice ******************')
dgst0 = b'\x93\x6a\x18\x5c\xaa\xa2\x66\xbb\x9c\xbe\x98\x1e\x9e\x05\xcb\x78\xcd\x73\x2b\x0b\x32\x80\xeb\x94\x44\x12\xbb\x6f\x8f\x8f\x07\xaf'
obj = uhashlib.sha256()
# 向硬件多次更新消息
obj.update(b'hello')
obj.update(b'world')
dgst = obj.digest()
print(dgst0 == dgst)
# print('********************** Test-3: Call digest() Twice ******************')
# dgst0 = b'\x93\x6a\x18\x5c\xaa\xa2\x66\xbb\x9c\xbe\x98\x1e\x9e\x05\xcb\x78\xcd\x73\x2b\x0b\x32\x80\xeb\x94\x44\x12\xbb\x6f\x8f\x8f\x07\xaf'
# obj = uhashlib.sha256()
# obj.update(b'hello')
# obj.update(b'world')
# dgst = obj.digest()
# dgst1 = obj.digest() # 错误,digest() 只能调用一次
# print(dgst0 == dgst)
# print(dgst == dgst1)
评论列表
条评论
登录