我在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 ) )
我确实想允许提交这些字符。我怎么能容纳?
答案 0 :(得分:0)
我发现在这种情况下问题不是PyCrypto,而是ASCII和Unicode字符的混合。这是一个更普遍的问题,我在下面的修复程序也解决了使用加密时的问题:
for char in message:
try:
char.decode("ascii")
except:
msgFormat += str(char.encode("utf-8"))
else:
msgFormat += str(char)