0

私は、Private Data Aggregation with Groups for Smart Grids in a Dynamic Setting in a Dynamic Setting in a CRT in Python で説明されているプロトコルを実装しようとしています。

これを行うには、次の値を計算する必要があります。

ここに画像の説明を入力

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 は、指定された基数の整数リテラルを表す文字列、バイト、または bytearray インスタンスでなければなりません。リテラルの前に「+」または「-」を付け、空白で囲むことができます。基数のデフォルトは 10 です。有効な基数は 0 および 2 ~ 36 です。基数 0 は、文字列の基数を整数リテラルとして解釈することを意味します。

>>> int('0b100', base=0)

4

このhexdigest呼び出しは 16 進数の 16 進文字列を返すので、次のようにしますint_value = int(hash_value, 16)

于 2017-06-16T22:07:21.577 に答える