是的,
但某些字符串必须在发送之前转义,然后在另一端转义。通过from base64 import b64encode, b64decode
或类似的东西。
这样做的原因是 JSON 数据必须是字符串或整数值,基本上没有别的。
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]))