PyCrypto 密码器无法编码字符

1 投票
1 回答
703 浏览
提问于 2025-04-18 17:03

我在使用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)

撰写回答