Python добавляет дополнительно к результату склепа - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создать API с токеном для связи между Raspberry Pi и веб-сервером.Прямо сейчас я пытаюсь сгенерировать токен с Python.

from Crypto.Cipher import AES
import base64
import os
import time
import datetime
import requests
BLOCK_SIZE = 32
BLOCK_SZ = 14

#!/usr/bin/python
salt = "123456789123" # Zorg dat de salt altijd even lang is! (12 Chars)
iv = "1234567891234567" # Zorg dat de salt altijd even lang is! (16 Chars)


currentDate = time.strftime("%d%m%Y")
currentTime = time.strftime("%H%M")
PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
secret = salt + currentTime
cipher=AES.new(key=secret,mode=AES.MODE_CBC,IV=iv)
encode = currentDate
encoded = EncodeAES(cipher, encode)

print (encoded)

Проблема в том, что вывод сценария exta b 'добавляет к каждой закодированной строке .. И на каждом конце a'

C:\Python36-32>python.exe encrypt.py
b'Qge6lbC+SulFgTk/7TZ0TKHUP0SFS8G+nd5un4iv9iI='

C:\Python36-32>python.exe encrypt.py
b'DTcotcaU98QkRxCzRR01hh4yqqyC92u4oAuf0bSrQZQ='

Надеюсь, кто-то может объяснить, что пошло не так.

ИСПРАВЛЕНО!

Я смог исправить это, чтобы расшифровать егов формате utf-8.

sendtoken = encoded.decode('utf-8')

1 Ответ

0 голосов
/ 29 мая 2018

Вы используете Python 3.6, который использует Unicode (UTF-8) для строковых литералов.Я ожидаю, что функция EncodeAES() возвращает строку ASCII, которую Python указывает на строку байтов, а не строку Юникода, добавляя b к строковому литералу, который она печатает.

Вы можете удалить b из выходных данных после Python или вы могли бы print(str(encoded)), который должен давать вам те же символы, поскольку ASCII является допустимым UTF-8.

РЕДАКТИРОВАТЬ:

Что вам нужно сделать, это декодировать строку байтов в UTF-8, как указано в ответе и в комментарии выше.Я ошибся в том, что str() сделал преобразование для вас, вам нужно позвонить decode('UTF-8') на той строке, которую вы хотите напечатать.Это преобразует строку во внутреннее представление UTF-8, которое затем печатается правильно.

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