b64解码时填充错误不正确

时间:2016-12-26 14:00:26

标签: python django

您好我有以下代码对某些数据进行编码和解码。但即使我已经添加了填充,它也会在解码数据时给出错误的填充错误。守则是; 的编码:

    plain = str(data)
    mismatch = len(plain) % 16
    if mismatch != 0:
        padding = (16 - mismatch) * ' '
        plain += padding

    secret_key = '3216549874561230'  
    cipher = AES.new(secret_key, AES.MODE_ECB)
    encoded = base64.b64encode(cipher.encrypt(plain))

此编码数据通过链接发送。我从我的URL的ID参数获取该数据。 的解码:

secret_key = '3216549874561230'
data = request.GET.get('ID')
cipher = AES.new(secret_key, AES.MODE_ECB)
decoded = cipher.decrypt(base64.b64decode(data))
print "-------------decoded-------------",decoded
data = {'id': decoded}

请帮助我,我是新手。非常感谢你们。

1 个答案:

答案 0 :(得分:0)

解决问题的最佳方法是不要自己实现这样的事情,特别是因为涉及到安全问题。使用django-allauth等库。

您的问题是将基本64字符串直接放入URL中,其中某些字符具有特殊含义。在评论的示例中,+在URL参数中被解释为空格。它需要正确转义,例如urlencode({'ID': 'fIG+YkFHVHSib46tqREppw=='})给出了ID=fIG%2BYkFHVHSib46tqREppw%3D%3D,这将在另一方面正确解释。