PyCrypto密码无法编码字符

时间:2014-08-12 20:08:00

标签: python google-app-engine pycrypto

我在Python 2.7和Google的App Engine中使用PyCrypto。我用它来编码一个存储在NDB中的消息。通常这不是问题,但是,有些字符不接受返回以下错误:

UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ U0001f601'进行编码:序数不在范围内(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 ) )

我确实想允许提交这些字符。我怎么能容纳?

1 个答案:

答案 0 :(得分:0)

我发现在这种情况下问题不是PyCrypto,而是ASCII和Unicode字符的混合。这是一个更普遍的问题,我在下面的修复程序也解决了使用加密时的问题:

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