我正在尝试在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函数返回一个字符串,因此不能用函数n来计算。
我在俯瞰什么?
答案 0 :(得分: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不是数字或者给出了base,那么x必须是一个字符串, bytes或bytearray实例,表示中的整数文字 给定基数。文字可以在' +'之前。或者' - '被包围 通过空白。基数默认为10.有效基数为0和2-36。 基数0表示将字符串中的基数解释为整数文字。
>>> int(' 0b100',base = 0)
4
hexdigest
调用将返回一个16位的十六进制字符串,因此您需要执行int_value = int(hash_value, 16)
之类的操作。