PyCrypto 密码器无法编码字符
我在使用Python 2.7的PyCrypto库和谷歌的App Engine。这个库是用来加密信息的,之后这些信息会存储在NDB中。通常来说,这没什么问题,但有些字符它无法处理,导致出现了以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\U0001f601' in position 0: ordinal not in range(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
我发现这个问题其实不是出在PyCrypto上,而是因为ASCII和Unicode字符混在一起了。这是一个更普遍的问题,我下面的解决办法也解决了在使用加密时遇到的这个问题:
for char in message:
try:
char.decode("ascii")
except:
msgFormat += str(char.encode("utf-8"))
else:
msgFormat += str(char)