はい、
ただし、特定の文字列は送信前にエスケープし、送信側でエスケープ解除する必要があります。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]))