ValueError:在Python2.7 for AES中解密加密数据时,输入字符串的长度必须是16的倍数

ValueError:在Python2.7 for AES中解密加密数据时,输入字符串的长度必须是16的倍数,python,encryption,cryptography,aes,Python,Encryption,Cryptography,Aes,我需要帮助! 我在python项目中使用AES进行数据加密。使用下面名为encrypt的方法,我可以加密数据。这种方法有效,我可以将加密数据保存到数据库中。我使用的是mongodb。 我的问题是当我试图解密这些数据时。我测试了它返回json格式的数据 patient_data = mongo.db.patients.find_one({'_id': doc_id}) doc = decrypt(patient_data) 参数patient_data是一个json。当我使用decrypt方法并

我需要帮助! 我在python项目中使用AES进行数据加密。使用下面名为
encrypt
的方法,我可以加密数据。这种方法有效,我可以将加密数据保存到数据库中。我使用的是mongodb。 我的问题是当我试图解密这些数据时。我测试了它返回json格式的数据

patient_data = mongo.db.patients.find_one({'_id': doc_id})
doc = decrypt(patient_data)
参数
patient_data
是一个json。当我使用decrypt方法并运行我的项目时,出现以下错误:

我添加了如何进行AES加密/解密的代码

key=b'\xbf\xc0\x85)\x10nc\x94\x02)j\xdf\xcb\xc4\x94\x9d(\x9e[EX\xc8\xd5\xbfI{\xa2$\x05(\xd5\x18'
    cipher = AES.new(key)

    def pad(s):
        return s + ((16-len(s) % 16) * '{')

    def encrypt(patient_data):
        global cipher
        for d in patient_data:
            encoded=cipher.encrypt(pad(patient_data[d]))
            encoded = b64encode(encoded) 
            patient_data_encrypted = patient_data
            patient_data_encrypted[d] = encoded
            # decode the encoded string
        return patient_data_encrypted

    def decrypt(patient_data):
        global cipher
        for d in patient_data:
            patient_data = b64decode(patient_data[d])
            dec = cipher.decrypt(patient_data).decode('utf8')
            l = dec.count('{')
            decoded = dec[:len(dec)-l]
            patient_data_dencrypted = patient_data
            patient_data_dencrypted[d] = decoded
        return patient_data_dencrypted


  [1]: http://i.stack.imgur.com/Mj4VL.png

您确定要在解密中执行此操作:patient_data=b64decode(patient_data[d])?是的,在加密后的加密方法末尾I encoded data encoded=b64encode(encoded),所以解密之前的第一件事应该是解码patient data=b64decode(patient data[d]),知道吗@DBUGGER您似乎正在覆盖传递到函数中的患者\ U数据。在发布到数据库之前,请检查您的密码文本的长度。它是16字节的倍数吗?从数据库检索长度时,请再次检查长度。长度变了吗?错误消息通常是由数据长度的更改引起的。