Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 21, 2016 11:26:29

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Конвертация строки в строку байтов

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

 requests.post(r'http://localhost:8080/sklpostreciver', {'data': byte_strings, 'user': os.getlogin()})
Перед тем, как отправлять, я шифрую каждую строку списка с помощью rsa - у меня по прежнему список строк байт.
Далее, на сервере (пока что всё происходит на одной машине, но это не важно) у меня bottle, и Apache или NGINX в перпективе, а на данный момент - движок, вшитый в bottle. Короче, bottle принимает POST запрос
 @route('\address')
def get_data():
    data = request.forms.get('data')
И пытается расшифровать:
     for byte_string in data:
        byte_string = rsa.decrypt(byte_string, privat_key)

И вот на строке, в которой должна происходить расшифровка, я получаю трейсбек:
 Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\bottle.py", line 862, in _handle
    return route.call(**args)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\bottle.py", line 1732, in wrapper
    rv = callback(*a, **ka)
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\...\reciver.py", line 23, in get_data
    bit_string = rsa.decrypt(byte_string, privat_key)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\rsa\pkcs1.py", line 231, in decrypt
    encrypted = transform.bytes2int(crypto)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\rsa\transform.py", line 52, in bytes2int
    return int(binascii.hexlify(raw_bytes), 16)
TypeError: a bytes-like object is required, not 'str'
Как я понимаю, мои строки байт в момент либо отправки, либо приёма запроса конвертируются в обычные строки. Как этого избежать, или как их конвертировать обратно?

Офлайн

#2 Ноя. 21, 2016 13:43:56

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Конвертация строки в строку байтов

Гугление в английском интернете помогло.
нужно просто byte_string = ‘string’.encode()
Вопрос закрыт, спасибо.

Офлайн

#3 Ноя. 21, 2016 14:18:11

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Конвертация строки в строку байтов

Нет, не закрыт совсем.
Теперь у меня в файл записывается только три символа за три прохода: “ue.”, и всё. Я вообще не понимаю, откуда и это взялось. Значение переменной со строками, сразу после отправки:
(я убрал шифрование на время разработки)

 [b'\x80\x02]q\x00(U\x1111/20/16 10:47:47q\x01}q\x02(U\tascii_argq\x03U\x0297q\x04U\n', b'window_argq\x05U\x1bC:\\WINDOWS\\system32\\cmd.exeq\x06U\tkeyID_argq\x07U\x0265q\x08U\x07key_argq\tU\x01Aq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:47:56q\x01}q\x02(U\tascii_argq\x03U\x0297q\x04U\n', b'window_argq\x05U\x02tkq\x06U\tkeyID_argq\x07U\x0265q\x08U\x07key_argq\tU\x01Aq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:47:58q\x01}q\x02(U\tascii_argq\x03U\x0297q\x04U\n', b'window_argq\x05U\x1bC:\\WINDOWS\\system32\\cmd.exeq\x06U\tkeyID_argq\x07U\x0265q\x08U\x07key_argq\tU\x01Aq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:48:10q\x01}q\x02(U\tascii_argq\x03U\x0298q\x04U\n', b'window_argq\x05U\x1bC:\\WINDOWS\\system32\\cmd.exeq\x06U\tkeyID_argq\x07U\x0266q\x08U\x07key_argq\tU\x01Bq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:48:11q\x01}q\x02(U\tascii_argq\x03U\x010q\x04U\n', b'window_argq\x05U%Chroma_Head - Microsoft Visual Studioq\x06U\tkeyID_argq\x07U\x03162q\x08U\x07key_argq\tU\x08Lcontrolq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:48:11q\x01}q\x02(U\tascii_argq\x03U\x010q\x04U\n', b'window_argq\x05U%Chroma_Head - Microsoft Visual Studioq\x06U\tkeyID_argq\x07U\x03160q\x08U\x07key_argq\tU\x06Lshiftq\n', b'ue.\x80\x02]q\x00(U\x1111/20/16 10:48:11q\x01}q\x02(U\tascii_argq\x03U\x010q\x04U\n', b'window_argq\x05U%Chroma_Head - Microsoft Visual Studioq\x06U\tkeyID_argq\x07U\x0227q\x08U\x07key_argq\tU\x06Escapeq\n', b'ue.']
Значение соответствующей переменной, сразу после получения:
 'ue.'
Что это такое вообще?

Офлайн

#4 Ноя. 21, 2016 14:40:41

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Конвертация строки в строку байтов

Чую, меня сейчас забанят нафиг.
Короче, в режиме отладки остановил программу, и посмотрел какие атрибуты содержит в себе объект request'a. Нашёл там нужную мне request.POST.dict, которая содержала строки.
Конвертнул строки в строки байт, записал в файл, закрыл файл…

 Traceback (most recent call last):
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\...\interpretor.py", line 9, in <module>
    unpickled_data = pickulator.GetDataFromDump()
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\...\pickulator.py", line 10, in GetDataFromDump
    data = pickle.load(data_file)
_pickle.UnpicklingError
Выругался. Трейсбек вылез, когда я попытался поработать с вот этим четырежды несчастным файлом так же, как с исходным (вывести нужные поля в окно графического интерфейса).
Неужели все так изъё6ываются, когда им нужно файл по сети POST запросом передать? Может есть какой-то более простой способ?

Отредактировано BearPro (Ноя. 21, 2016 15:00:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version