Note

This is the documentation for the latest development branch and may refer to features that are not available in released versions. If you are looking for the documentation for a specific release, use the drop-down menu on the left and select the desired version.

uhashlib Module API Manual#

Overview#

The uhashlib module implements binary data hashing algorithms. The specific list of available algorithms depends on the board. Possible algorithms include:

  • SHA256 - The current modern hash algorithm (SHA2 family). Suitable for cryptographically secure purposes. Included in the MicroPython core, and any board is recommended to provide this algorithm unless it has specific code size constraints.

  • SHA1 - A previous-generation algorithm. Not recommended for new uses, but SHA1 is part of some internet standards and existing applications, so boards targeting network connectivity and interoperability will try to provide this.

  • MD5 - A legacy algorithm not considered cryptographically secure. Only a few boards targeting interoperability with legacy applications will provide this.

Please refer to the MicroPython official hash documentation for details

Constructor#

sha256#

Description

Creates a SHA256 hash object, and optionally feeds data into it.

Syntax

obj = uhashlib.sha256([data])

Parameters

Parameter

Description

Input/Output

data (optional)

Binary data

Input

Return Value

Returns the SHA256 hash object.

sha1#

Description

Creates a SHA1 hash object, and optionally feeds data into it.

Syntax

obj = uhashlib.sha1([data])

Parameters

Parameter

Description

Input/Output

data (optional)

Binary data

Input

Return Value

Returns the SHA1 hash object.

md5#

Description

Creates an MD5 hash object, and optionally feeds data into it.

Syntax

obj = uhashlib.md5([data])

Parameters

Parameter

Description

Input/Output

data (optional)

Binary data

Input

Return Value

Returns the MD5 hash object.

Hasher Object Methods#

Data Update Function update()#

Description

Inputs more binary data into the hash.

Syntax

hash.update(data)

Parameters

Parameter

Description

Input/Output

data

Binary data

Input

Return Value

None

Message Digest Function digest()#

Description

Returns the hash value of all data passed through the hash as a bytes object.

Note: After calling this method, no more data can be input into the hash.

Syntax

dgst = hash.digest()

Parameters

None

Return Value

Returns the hash value of all data passed through the hash.

Hexadecimal Message Digest Function hexdigest()#

This method is not implemented. You can use binascii.hexlify(hash.digest()) to achieve a similar effect.

Example Program#

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)
Comments list
Comments
Log in