0

我正在尝试使用python中的 CRT 实现在动态设置中使用智能电网组的私有数据聚合一文中描述的协议。

为此,我需要计算以下值:

在此处输入图像描述

我知道,从 python 3.6 开始,您可以按如下方式计算 SHA3 值:

import hashlib
hash_object = hashlib.sha3_512(b'value_to_encode')
hash_value = hash_object.hexdigest()

我想知道你应该解决这个问题,因为据我所知,SHA-3 函数返回一个字符串,因此无法在函数中以 n 次方计算。

我在看什么?

4

1 回答 1

1

如果我们定义一个哈希函数 $H: \{0, 1\}^* \rightarrow \{0, 1\}^n$,即产生 $n$ 位输出的哈希函数,我们总是可以解释二进制数据$h$ 以整数形式输出。该摘要的整数值为 $\sum_{i=0}^n h_i 2^i$,换句话说,摘要是整数的基数 2 表示。

在您的情况下,由于 python 具有类型的概念,我们需要获取二进制字符串并将其转换为整数类型。内置int函数可以为我们做到这一点:

int(x=0) -> 整数

int(x, base=10) -> 整数

将数字或字符串转换为整数,如果没有给出参数,则返回 0。如果 x 是一个数字,则返回 x.__int__()。对于浮点数,这将截断为零。

如果 x 不是数字或者如果给出了基数,则 x 必须是字符串、字节或字节数组实例,表示给定基数中的整数文字。字面量前面可以有 '+' 或 '-' 并被空格包围。基数默认为 10。有效基数为 0 和 2-36。基数 0 表示将字符串中的基数解释为整数文字。

>>> int('0b100', 基数=0)

4

hexdigest调用将返回一个以 16 为基数的十六进制字符串,因此您需要执行类似int_value = int(hash_value, 16).

于 2017-06-16T22:07:21.577 回答