为什么Python的base64.b64decode()忽略了字符串末尾的胡言乱语?

2024-05-29 05:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的标记,我正在使用python的base64.b64decode()方法解码。在

它起作用了。但正如您在下面看到的,即使我在末尾插入乱七八糟的字符,它也会返回相同的结果。为什么?这两个字符串不应该产生两个不同的解码结果吗?在

>>> import base64
>>> token = "Ti6VXtqWYb8WVuR6m/bnDKyVqS96pvRGH9SqTsC7w1E4ZlcjCK8SDQFWRa2b0q96pAflgZTmao+CeEk9cJFVUq0MgBCBoPMUEdTLwT7AhyAa1xOQf8b9C63+DH3v2L+PqJMPSTPfWRXL5WeOPR+gFJBrAm/658phg6vzhBMNS6wgyiiLqfWUOpWyAlcMRrKu5Yq7mXaloxxFQm6HEVcvrjDVGSdsCHRB0Osby8PttEel5oqFkYq85LfNobE9VaR6Onzowru1lHnTdfEqUT5qabXaw9j9rapT4+in2N1WQt1t+XzBn1xxGLT903FOZQxkf2X7R9sGrhLXzSnBAW5q18T8ZJBsxsq3OryCgKfPEJ3x+uj0LCnoogX/gucVcZDp19HIdvelOQsD5de85U800LCDQFKatd/+VBhh4oRrnefD+6l4WRzjg1h5J2ZNgjUhCtIu6r63zFq5ef7nG60JxdTYPOT1njGfEUNAuNuBW97i98ZfhmiPOZMaINPoEFHJQRG1nMwAYCwcytn053n+7D5Dz6MZxrWwAX3/VS9fT6SduFVQ6X4HJA/+FIH8epcqAkU6M6UVm7sfQwHV/vflVAkGNQFevNwA2+u6erInPTWqL9usz4IU47ekp68xk1BBAYEqE0AKeXaZZVpYJ8CJmbAcdxvMD9+Pchi9lk6ZomzxxLKWEPGcPjFobM8bRDEVbmfP+vYfWwovy/tOo9tqkqc0sAvS5RGp9Q0SBAfBQ9c8TXuwqrDBc0OPG5TTEQQ42Cd9Ky9K2ZHldQkXOc/H0vIWBo2m5aJABvVWambd0oEzGmQHrNYzQxNSKgWSLoh7w8HrUzn9skJQGzU/igt6EOdp617ToBD5G936ByF7Rft+FGKB3jiFeEvke0Fbh3wrsr0xqP9JxL/tr8P2x29hRQauigY2MYwrt0nilET/x88="
>>> base64.b64decode("%sXXXXXXBlahBlahBlah" % (token)) == base64.b64decode(token)
True

如果我把胡言乱语的字符放在开头,它就失败了:

^{pr2}$

Tags: 方法字符串标记importtoken解码字符末尾
1条回答
网友
1楼 · 发布于 2024-05-29 05:13:15

The CPython implementation如果它看到一个pad(=),请停止解释。在

    if (this_ch == BASE64_PAD) {
        if ( (quad_pos < 2) ||
             ((quad_pos == 2) &&
              (binascii_find_valid(ascii_data, ascii_len, 1)
               != BASE64_PAD)) )
        {
            continue;
        }
        else {
            /* A pad sequence means no more input.
            ** We've already interpreted the data
            ** from the quad at this point.
            */
            leftbits = 0;
            break;
        }
    }

一个使用base64编码字符串而不填充的实验:

^{pr2}$

相关问题 更多 >

    热门问题