取 SHA3 哈希函数的指数
Taking the exponent of a SHA3 hash function
我正在尝试实现 python 中论文 Private Data Aggregation with Groups for Smart Grids in a Dynamic Setting using CRT 中描述的协议。
为此,我需要计算以下值:
我知道从 python 3.6 开始,您可以按如下方式计算 SHA3 值:
import hashlib
hash_object = hashlib.sha3_512(b'value_to_encode')
hash_value = hash_object.hexdigest()
我想知道你应该解决这个问题,因为据我所知,SHA-3 函数 returns 是一个字符串,因此不能在具有 n 次方的函数中计算。
我忽略了什么?
如果我们定义一个散列函数 $H: \{0, 1\}^* \rightarrow \{0, 1\}^n$,即产生 $n$ 位输出的散列函数,我们可以始终将其输出的二进制数据 $h$ 解释为整数。此摘要的整数值为 $\sum_{i=0}^n h_i 2^i$,换句话说摘要是整数的基数 2 表示。
在你的例子中,由于 python 有类型的概念,我们需要获取二进制字符串并将其转换为整数类型。内置的 int
函数可以为我们做到这一点:
int(x=0) -> integer
int(x, base=10) -> integer
Convert a number or string to an integer, or return 0 if no arguments
are given. If x is a number, return x.__int__(). For floating point
numbers, this truncates towards zero.
If x is not a number or if base is given, then x must be a string,
bytes, or bytearray instance representing an integer literal in the
given base. The literal can be preceded by '+' or '-' and be surrounded
by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.
Base 0 means to interpret the base from the string as an integer literal.
>>> int('0b100', base=0)
4
hexdigest
调用将 return 一个以 16 为基数的十六进制字符串,所以你会想做类似 int_value = int(hash_value, 16)
.
的事情
我正在尝试实现 python 中论文 Private Data Aggregation with Groups for Smart Grids in a Dynamic Setting using CRT 中描述的协议。
为此,我需要计算以下值:
我知道从 python 3.6 开始,您可以按如下方式计算 SHA3 值:
import hashlib
hash_object = hashlib.sha3_512(b'value_to_encode')
hash_value = hash_object.hexdigest()
我想知道你应该解决这个问题,因为据我所知,SHA-3 函数 returns 是一个字符串,因此不能在具有 n 次方的函数中计算。
我忽略了什么?
如果我们定义一个散列函数 $H: \{0, 1\}^* \rightarrow \{0, 1\}^n$,即产生 $n$ 位输出的散列函数,我们可以始终将其输出的二进制数据 $h$ 解释为整数。此摘要的整数值为 $\sum_{i=0}^n h_i 2^i$,换句话说摘要是整数的基数 2 表示。
在你的例子中,由于 python 有类型的概念,我们需要获取二进制字符串并将其转换为整数类型。内置的 int
函数可以为我们做到这一点:
int(x=0) -> integer
int(x, base=10) -> integer
Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.
If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal.
>>> int('0b100', base=0)
4
hexdigest
调用将 return 一个以 16 为基数的十六进制字符串,所以你会想做类似 int_value = int(hash_value, 16)
.