У меня есть клиент/серверная программа, где клиент отправляет открытый текст на сервер, который затем запускает шифрование AES и возвращает зашифрованный текст. Я использую следующий алгоритм для шифрования/дешифрования:Python - данные, отправленные через сокет, различаются по клиенту и серверу
http://anh.cs.luc.edu/331/code/aes.py
Когда я получаю результаты обратно из шифрования и распечатать их на стороне сервера я вижу в основном тарабарщину в терминале. Я могу сохранить в файл сразу и получить что-то вдоль этих линий:
tgâY†Äô®Ø8ί6ƒlÑÝ%ŠIç°´>§À¥0Ð
Я могу видеть, что это правильный выход, потому что, если я немедленно расшифровать его на сервере, я получаю исходный открытый текст обратно. Если я запускаю это через сокет, отправить его обратно клиенту, и печать(), я получаю что-то больше, как это:
\rtg\xe2Y\x86\x8f\xc4\xf4\xae\xd88\xce\xaf6\x83l\xd1\xdd%\x8aI\xe7\xb0\xb4>\xa7\xc0\x18\xa50\xd0
Там очевидная разница. Я знаю, что \ x представляет шестнадцатеричное значение. Если я сохраню на стороне клиента, итоговый текстовый файл все еще содержит все экземпляры \ x (т. Е. Он выглядит точно так же, как показано выше). Что я должен сделать, чтобы преобразовать это в тот же вид вывода, который я вижу в первом примере? Из того, что я видел до сих пор, кажется, что это юникода и у меня возникают проблемы ...
Соответствующий код из server.py
key = aes.generateRandomKey(keysizes[len(key)%3])
encryptedText = aes.encryptData(key, text)
f = open("serverTest.txt", "w")
f.write(encryptedText)
f.close()
print(encryptedText)
decryptedText = aes.decryptData(key, encryptedText)
print(decryptedText)
conn.sendall(encryptedText)
Соответствующий код из client.py
cipherText = repr(s.recv(16384))[1:-1]
s.close()
cipherFile = raw_input("Enter the filename to save the ciphertext: ")
print(cipherText)
f = open(cipherFile, "w")
f.write(cipherText)
Редактировать: Чтобы просто сказать, мне нужно отправить эти данные клиенту и отобразить его так же, как и на сервере. Я чувствую, что есть что-то, что я могу сделать с расшифровкой, но все, что я пробовал до сих пор, не работает. В конечном счете, мне придется отправить с клиента обратно на сервер, поэтому я уверен, что исправление здесь также будет работать для этого, если я правильно прочитаю его из файла.
Edit2: При обычной отправке (как в моем коде выше), а затем на клиентской стороне с расширением «строка-побег», я получаю идентичный вывод на терминал с обоих концов. Выходные файлы также выглядят одинаково. Эта проблема близка к разрешению, предполагая, что я могу прочитать это и получить правильные данные, отправленные обратно на сервер для дешифрования.
** НЕ ИСПОЛЬЗОВАТЬ PRINT для двоичных данных **! Если это текстовая печать в порядке, если не сначала закодировать ее на текст (в шестнадцатеричном порядке), а затем распечатать это представление - печать двоичных данных зависит от кодировки терминала и может давать ошибки декодирования в unicode, если кодировка является unicode. В любом случае, если вы и я используем различную кодировку, мы увидим разные представления для одних и тех же данных –