3

私は暗号化が初めてで、以下のコードを解釈しようとしています。つまり、どういう<xor>意味ですか?

secret_key 秘密鍵があります。unique_id もあります。以下のコードを使用してパッドを作成します。

pad = hmac.new(secret_key, msg=unique_id, digestmod=hashlib.sha1).digest()

パッドが作成されると、たとえば 1000 の価格が表示されます。擬似コードである次の手順に従おうとしています。

enc_price = pad <xor> price

Python では、実装するコードは何enc_price = pad <xor> priceですか? これを行う背後にあるロジックは何ですか?

注として、ここでやりたいことの完全な説明: https://developers.google.com/ad-exchange/rtb/response-guide/decrypt-price

developers.google.com/ad-exchange/rtb/response-guide/decrypt-price

ありがとう

4

4 に答える 4

3

バイナリ(必要なものだと思います)xor^Pythonにあります:

>>> 6 ^ 12
10

バイナリ xor は次のように機能します (数値はバイナリで表されます)。

     1234

6  = 0110
12 = 1100
10 = 1010

ビットのすべてのペアについて、それらの合計が1(この例ではビット 1 と 3) である場合、結果のビットは1です。それ以外の場合は、0です。

于 2012-07-21T18:02:33.953 に答える
0

パッドと平文の「価格」は、それぞれビットのストリームとして解釈されます。2 つのストリームの対応するビットごとに、ビットのペアの「排他的 OR」を取ります。ビットが同じ場合は 0 を出力し、ビットが異なる場合は 1 を出力します。この操作は可逆であるため興味深いものです。 : 平文 XOR パッド -> 暗号文、および暗号文 XOR パッド -> 平文。

ただし、Python では、XOR 演算は面倒で、初心者にとっては非常に複雑であるため、通常は自分で行うことはありません。PyCryptoなどの一般的な暗号化ライブラリを使用して作業を行いたい場合。

于 2012-07-21T18:05:04.887 に答える
0

私はそうしました

def strxor(s1,s2):
    size =  min(len(s1),len(s2))

    res = ''
    for i in range(size):
        res = res + '%c' % (ord(s1[i]) ^ ord(s2[i]))
    return res
于 2013-09-30T13:53:19.443 に答える
0

バイナリビット演算」のことですか?

& 演算子は、引数のビットごとの AND を生成します。引数は、プレーンまたは long 整数でなければなりません。引数は共通の型に変換されます。

^ 演算子は、引数のビットごとの XOR (排他的 OR) を生成します。これは、プレーンまたは long 整数でなければなりません。引数は共通の型に変換されます。

| | 演算子は、その引数のビットごとの (包括的) OR を生成します。これは、プレーンまたは long 整数でなければなりません。引数は共通の型に変換されます。

[アップデート]

文字列と数値を xor することはできないため、次のいずれかを行う必要があります。

  • 数値を同じサイズにパディングされた文字列に変換し、各バイトを xor します (たとえば、誤って無効な Unicode を生成するなど、一部の文字で奇妙な「エスケープ」問題が発生する可能性があります)。
  • ダイジェストの生の値 (20 バイト整数?) を xor に使用し、結果の数値の 16 進ダイジェストを作成します。

このようなもの(テストされていません):

pad = hmac.new(secret_key, msg=unique_id, digestmod=hashlib.sha1).digest()
rawpad = reduce(lambda x, y: (x << 8) + y, 
            [ b for b in struct.unpack('B' * len(pad), pad)])
enc_price = "%X" % (rawpad ^ price)

[アップデート]

OP は、「 DoubleClick Ad Exchange Real-Time Bidding Protocol 」を実装したいと考えています。

このまさに記事は、利用可能ないくつかのサンプルpythonコードがあることを示しています:

初期テスト

requester.tar.gz を使用して、入札アプリケーションを内部的にテストできます。これは、入札アプリケーションにリクエストを送信し、レスポンスをチェックするテスト Python プログラムです。このプログラムは、Ad Exchange 担当者からのリクエストに応じて利用できます。

于 2012-07-21T17:59:54.210 に答える