python3 base64解码出现TypeError:Incorrect padding
今天在解决爬虫对加密参数的分析时,需要使用到base64解码。但是过程中出现了TypeError:Incorrect padding的错误提示。以下是解决方法,以便查阅。
其实正常使用base64是不会出现问题的,就比如下面的代码。
#!usr/bin/env python
# coding:utf- import base64 a = b'hello'
b = base64.b64encode(a)
# 对a进行base64编码
print(b) # b'aGVsbG8='
# 对b进行base64解码,也就是把a编码过的内容解码
c = base64.b64decode(b)
print(c) # b'hello'
上面代码的编码结果是完整的,所以直接解码出来没有问题。如果编码结果不完整,比如上面代码中如果给定的bytes对象的值是b'aGVsbG8‘ ,就会出现TypeError:Incorrect padding异常提示。比如下面的代码就报错了。
#!usr/bin/env python
# coding:utf-8 import base64 a = b'aGVsbG8'
b = base64.b64decode(a)
print(b) #binascii.Error: Incorrect padding
解决方法如下:
#!usr/bin/env python
# coding:utf-8 import base64 a = b'aGVsbG8'
missing_padding = 4 - len(a) % 4
if missing_padding:
a += b'=' * missing_padding
b = base64.b64decode(a)
print(b) # b'hello'
这样问题就解决了,其实就是在后面加等号。而missing_padding计算的就是等号的个数。如果你算出了=号的数量,直接加=号也是可以的。比如下面的代码:
#!usr/bin/env python
# coding:utf-8 import base64
import chardet a = b'aGVsbG8'
c = base64.b64decode(a + b'=')
print(c) # b'hello'
至于计算是怎么来的,需要了解下base64的原理。用一个等式表示就是,3x8 = 4x6,也就是,以前能存3字节的,现在能存4字节,只不过把原先的位bit进行了分割,而且每一个字节是用6位来表示。因为分割后的每一个字节只有6位了,不足的两位就以0来填充。而且这4个字节可以看做是一个整体,base64解码后的bytes长度至少为4且为4的倍数,不足部位以‘=’填充。
听的很迷糊?其实是我表达的不好,而且懒得画图。还是看代码:
#!usr/bin/env python
# coding:utf-8 import base64 # 原始1x8 =8位
a = b'h'
# base64编码后 8 / 6 = 1 余2,所以至少需要2个字节位,为了满足能被4整除,需要补充两个=号
b = base64.b64encode(a)
print(b) # b'aA==' # 把编码后的结果处理一下,去掉‘=’号
c = b.decode('utf-8').rstrip('=')
# 对结果进行解码,前面已经算出需要2个=号了,直接加上就好
d = base64.b64decode(c.encode('utf-8') + b'=' * 2)
# 还原结果
print(d) # b'h'
这样就一目了然了,关于base64引发异常总结就到这里。
python3 base64解码出现TypeError:Incorrect padding的更多相关文章
- Python解码base64遇到Incorrect padding错误
Python解码base64遇到Incorrect padding错误 base64转码过程 先说一下转换过程,详细的可以参考阮一峰.廖雪峰博客: 所谓Base64,就是说选出64个字符----小写字 ...
- python base64 decode incorrect padding错误解决方法
个人觉得原因应该是不同的语言/base64库编码规则不太统一的问题. python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足 如下代码: da ...
- python3 base64模块代码分析
#! /usr/bin/env python3 """Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data ...
- C# Base64解码 二进制输出
具体的:Base64编码解码还需要学习 /// <summary> /// base64 解码Excel下载 /// </summary> /// <param name ...
- 微信小程序之图片base64解码
不知道大家在做微信小程序的时候遇到base64解码的问题,我之前在做微信小程序的时候遇到base64解析图片一直有问题,所以在这里把遇到的问题和解决方案在这里记录一下: 在平时的项目中我们是直接用ba ...
- 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片
实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...
- SqlServer Base64解码中文
最近在做一个和拥有TurboCRM相关的项目,其中需要取出客户信息的联系人字段,经过查看,这个字段在存入时用Base64加密过了 这个功能在应用层实现是很方便的,但是由于一些特殊原因,只能放到SqlS ...
- 3 python3 编码解码问题 upd接受数据
1.python3下的中文乱码:send_data.encode("utf-8") from socket import * udp_socket = socket(AF_INET ...
- 【java工具类】对字节数组字符串进行Base64解码并生成图片
import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.springfra ...
随机推荐
- Lyft Level 5 Challenge 2018 - Final Round Div. 1没翻车记
夜晚使人着迷.没有猝死非常感动. A:显然对于水平线段,只有横坐标的左端点为1的时候才可能对答案产生影响:对于竖直直线,如果要删一定是删去一段前缀.枚举竖直直线删到哪一条,记一下需要删几条水平线段就可 ...
- [ZJOI2008]骑士 DP dfs
---题解--- 题解: 观察题面可以很快发现这是一棵基环内向树(然而并没有什么用...) 再稍微思考一下,假设将这个环中的任意一点设为root,然后去掉root到下面的特殊边(即构成环的那条边),那 ...
- TextView AutoLink, ClikSpan 与长按事件冲突的解决
前言 首先,我们先来复习一下 autoLink 和 ClickableSpan 是干什么用的. autoLink 当中有五个属性值:分别是 phone.email.map.web.all 和 none ...
- 洛谷 P3477 [POI2008]PER-Permutation 解题报告
P3477 [POI2008]PER-Permutation 题目描述 Multiset is a mathematical object similar to a set, but each mem ...
- JQuery中的each()的使用
each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理. jQuery和jQuery对象都实现了该方法,对于jQuery对象,只是把each方法简单 ...
- 【Foreign】阅读 [线段树][DP]
阅读 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input 0 10 4 10 2 3 10 8 ...
- 02-更改窗口的根控制器
Demo示例程序源代码
源代码下载链接:02-更改窗口的根控制器.zip18.0 KB // MJAppDelegate.h // // MJAppDelegate.h // 02-更改窗口的根控制器 // // ...
- bzoj 3223 裸splay
裸的splay 今儿写的splay,由于自己刚开始学,发现几个容易漏掉的地方 1:开始给所有的儿子赋值为-1 2:给max[-1]赋值为-maxlongint 3:开始father[root]:=sr ...
- Ring0层创建事件,Ring3层接收
在学习驱动过程中,一个很重要的内容就是Ring3层与Ring0层的通信,方法有很多种,互斥体,信号量,文件等等,用的比较普遍的,还是事件.所以在学习的过程中,做了一个简单的Demo,主要是体会一下方法 ...
- 【Sqlite3】SQLITE3使用总结(转)
原文转自 https://www.cnblogs.com/wenxp2006/archive/2012/06/04/2535169.html SQL语句操作 介绍如何用sqlite 执行标准 sql ...