取SHA3哈希函数的

时间:2017-06-16 21:49:26

标签: python python-3.x sha-3

我正在尝试在python中实现文章Private Data Aggregation with Groups for Smart Grids in a Dynamic Setting using CRT中描述的协议。

为了做到这一点,我需要计算以下值:

enter image description here

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

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

我想知道你应该解决这个问题,因为据我所知,SHA-3函数返回一个字符串,因此不能用函数n来计算。

我在俯瞰什么?

1 个答案:

答案 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)之类的操作。