1

我在 pi pico 上的 micropython 中使用 uhashlib 对事物进行哈希处理。这是一个例子:

import sys
import os
import uhashlib
import time

time_now = "blergh"
hash_test = uhashlib.sha256(time_now).digest()

print(time_now)
print(hash_test)

这输出:

blergh
b'Y|\x84W\xa1\x1d\x86cb~\x0bL\x1e\\\x92\xcd-\x93\x05\xddz\x0e\xe1\x9f\x9a\xc1H6\x93\xd8\x0c8'

...显然,这不是超级有用。我已经尝试了很多东西,但我无法弄清楚如何从b'...'micropython 中的字节()进行转换。有人有想法/方法吗?

4

2 回答 2

3

使用ubinascii.hexlify并跳过篮球。

ubinascii.hexlify()返回bytes。通过bytes将 a解码str,然后将其转换str为 an int(使用 base16),我们可以将值传递给hex(). micropython中没有hexfor 的属性。bytes

以下已在运行 micropython 1.14 的 Raspberry Pi Pico 上进行了全面测试。我怀疑早期版本也可以工作,只要它们拥有两个模块依赖项。

import ubinascii, uhashlib

hs = uhashlib.sha256(b'blergh')

def hexdigest(sha):
    return hex(int(ubinascii.hexlify(sha.digest()).decode(), 16))

hx = hexdigest(hs) #0x597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38

于 2021-04-05T02:02:40.423 回答
2

您应该能够使用上面的.hex()方法直接将任何字节解码为十六进制!

>>> b"blerg".hex()
'626c657267'

我没有uhashlib,但这适用于股票hashlib

>>> hashlib.sha256(b"blergh").digest().hex()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'
>>> hashlib.sha256(b"blergh").hexdigest()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'
于 2021-04-01T20:33:56.247 回答