0

JSON についてはまだよくわかりません。このチュートリアルを読み始めたばかりなので、ご容赦ください。

http://pymotw.com/2/json/

私の質問は、JSON を使用して、暗号化されたセクションを含むメッセージを Python サーバーに送信して、別のサーバーに転送できるようにすることはできますか?

メッセージは、SSL を介して Javascript クライアントから送信され、Python サーバーに関する情報と、別の Python サーバーに転送される暗号化されたメッセージが含まれます。メッセージは次のようになります。

{ref_obj { msg_obj }_pub_k }_SSL

これは可能ですか?この投稿を見ました:

Python pycrypto モジュール: simplejson が暗号化された文字列をダンプできないのはなぜですか?

これが JSON で実行できない場合、誰かがそれをどのように行うべきかアドバイスできますか? 私が持っている唯一の要件は、元のメッセージが Javascript クライアントから来て (Chrome のプラグインになるため)、転送のために Python サーバーに行く必要があるということです。

前もって感謝します!

4

2 に答える 2

2

JSON を単純に暗号化し、暗号文を生のバイナリ データとして送信できます。

JSON は単なる形式です。誰もあなたにそれをネットワーク経由で送信するよう強制していません。

于 2013-04-12T14:04:45.137 に答える
1

はい、

ただし、特定の文字列は送信前にエスケープし、送信側でエスケープ解除する必要があります。from base64 import b64encode, b64decodeまたは類似のもののいずれか。

この理由は、JSON データは文字列または int 値でなければならず、基本的にそれ以外の値ではないためです。

json.dumps({1 : 2, 'hey' : 'you'})動作し、それはあなたがそれを維持する必要があるフォーマットです. 「通常の」文字列を想定しているため、バイナリデータがjsonを混乱させる可能性があることを意味します。b64encode は、文字列内の有効な文字のみであることを保証します:)

あなたが達成しようとしているものに応じて。JSON 文字列全体を暗号化してサーバーに送信し、復号化して JSON として解析することもできます。

暗号化をトンネルと見なします。

JSON -> 暗号化(JSON-string) -> サーバー -> 復号化 -> JSON の解析

または、JSON データをメタデータとして必要な場合は、最初のオプションを実行します。

これは、すべてのトラフィックを「暗号化」としてカプセル化する方法です。

def encrypt(s):
    encryptedString = AES.encrypt(s)
    return b64encode(encryptedString)

sock.connect(server)
jsondata = {1 : 2}
sock.send( encrypt(json.dumps(jsondata)) )

そして、サーバー上で次のことを行うだけです:

data = sock.recv(1024)
jsondata = json.loads( b64decode(decrypt(data))) )
print(jsondata)

これは、json データの一部のみを暗号化する方法です。

def encrypt(s):
    encryptedString = AES.encrypt(s)
    return b64encode(encryptedString)

sock.connect(server)
jsondata = {1 : encrypt(2)}
sock.send( json.dumps(jsondata) )

そしてサーバー上で:

data = sock.recv(1024)
jsondata = json.loads(data)
jsondata[1] = decrypt(b64decode(jsondata[1]))
于 2013-04-12T14:03:20.707 に答える