Шифр PyCrypto не может кодировать символ

Я использую PyCrypto в Python 2.7 и Google App Engine. Я использую его для кодирования сообщения, которое сохраняется в NDB. Как правило, это не проблема, однако есть символы, которые он не принимает, возвращая следующую ошибку:

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u'\U0001f601' в позиции 0: порядковый номер не в диапазоне (128)

В приведенном выше случае это задыхается от отправленного смайлика. Я использую следующий код для шифрования:

def encypt_data(self,message,PIN):
        key = aes_key+PIN
        BS = 16
        pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
        message = pad(message)
        iv = Random.new().read(AES.block_size)
        cipher = AES.new(key, AES.MODE_CFB, iv)
        return base64.b64encode( iv + cipher.encrypt( message ) )

Я хочу разрешить отправку этих персонажей. Как я могу разместиться?


person C6Silver    schedule 12.08.2014    source источник


Ответы (1)


Я обнаружил, что в данном случае проблема была не в PyCrypto, а в сочетании символов ASCII и Unicode. Это более общая проблема, и мое исправление ниже также решило проблему, связанную с использованием шифрования:

for char in message:
   try:
      char.decode("ascii")
    except:
       msgFormat += str(char.encode("utf-8"))
     else:
        msgFormat += str(char)
person C6Silver    schedule 12.08.2014