Как включить \ n в двоичном файле, пока не появится фактический маркер новой строки - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть текст, который я хочу закодировать. Как только он закодирован, в нем есть «\ n». Затем у меня есть Python добавить B '\ N', чтобы добавить новую строку. Мой сокет считает, что первый \ n - это конец файла, когда он на самом деле является частью текста.

Я просмотрел свой код, и это просто то, что я не знаю, как исправить.

Генерация двоичных данных

print("Calculating Key")
sharedKey = str((int(recieverPublicKey) ** int(privateKey)) % int(mod))
sharedKey = hashlib.sha256(sharedKey.encode())
sharedKey = sharedKey.hexdigest()
sharedKey = sharedKey[0:32]
print("Encrypting Key")
initVector = 16 * '\x00'
sharedKey = bytes(str(sharedKey), encoding='utf-8')
encryptor = AES.new(sharedKey, AES.MODE_CBC, initVector)
encryptedKey = encryptor.encrypt(dencryptionKey)
print(encryptedKey)
time.sleep(0.1)
print("Sending Encryption Key")
sock.sendall(encryptedKey + b'\n')

Декодирование

sharedKey = str((int(senderPublicKey ** int(privateKey))) % int(mod))
sharedKey = hashlib.sha256(sharedKey.encode())
sharedKey = sharedKey.hexdigest()
sharedKey = sharedKey[0:32]
initVector = 16 * '\x00'
print("Recieving Encryption Key")
time.sleep(0.1)
print("Decrypting Key")
encryptedKey = clientFile.readline()
print(encryptedKey)
encryptedKey = encryptedKey.strip().decode()
print(encryptedKey)
initVector = 16 * '\x00'
sharedKey = bytes(str(sharedKey), encoding='utf-8')
decryptor = AES.new(sharedKey, AES.MODE_CBC, initVector)
encryptedKey = encryptedKey[2:-2]
print(encryptedKey)
for x in range(8):
    encryptedKeyPart = encryptedKey[0:16]
    print(encryptedKey)
    encryptedKey = encryptedKey[16:-1]
    dencryptionKey = dencryptionKey +    decryptor.decrypt(encryptedKeyPart).decode('utf-8')
    print(dencryptionKey)

Выход на приемную сторону

b';l\xb8\xd7{\xa7Wt\x99\xb6\xc2\xfa\xf8\x8c\xe6\xd7=\x1d\x8e\x0b\r\x8e\xa4\xee\xa3\x84\xca\xfd\x91L\xda\xbb\x82\xc3\x93\x0f\xec\xd9o\xa7V\x1fs\x89{\x87\xd3\xf0\xc3\xba\x8f\xd9\xd0v\x18k-\xd9\xb1C&Y\x82+\xb8\xb6\x85:\xfd\x9f\x13\xea\xd8v\xadG\x11_\xbf4r\xb6\xa3\n'

Вывод на отправляющей стороне

b';l\xb8\xd7{\xa7Wt\x99\xb6\xc2\xfa\xf8\x8c\xe6\xd7=\x1d\x8e\x0b\r\x8e\xa4\xee\xa3\x84\xca\xfd\x91L\xda\xbb\x82\xc3\x93\x0f\xec\xd9o\xa7V\x1fs\x89{\x87\xd3\xf0\xc3\xba\x8f\xd9\xd0v\x18k-\xd9\xb1C&Y\x82+\xb8\xb6\x85:\xfd\x9f\x13\xea\xd8v\xadG\x11_\xbf4r\xb6\xa3\ng\xb0\xde\xa9jW\x8d\x85T\x06mR\x0e\xfe\xcar\xaa\x17\x98j\x92lV\x07\xf2}\xad%\x0c\x01\xe4\xf1\xd7=\x8a\xa7\xeb\xd2\xb2c\xb8\x88\xb0\x9b\n'

Я хотел, чтобы он получил все данные и начал расшифровывать текст. Программа останавливается на \ n, который должен быть частью текста, и не читает остальное, в результате чего .decode ('utf-8') выдает ошибку, потому что она не завершена.

1 Ответ

0 голосов
/ 27 апреля 2019

Если данные, которые вы отправляете, содержат новую строку, вы не можете использовать новую строку в качестве разделителя сообщения. Как в вашем другом вопросе и моем ответе , отправьте размер ключа шифрования и символ новой строки, а затем ключ шифрования. На принимающей стороне получите размер ключа шифрования, оканчивающийся символом новой строки, а затем прочитайте ровно столько байтов для самого ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...