Python的base64模块是用来作base64编解码的。这种编码方式在电子邮件中是很常见的。它可以把不能作为文本显示的二进制数据编码为可显示的文本信息。编码后的文本大小会增大1/3。
闲话不多说,base64模块真正用的上的方法只有8个,分别是encode, decode, encodestring, decodestring, b64encode, b64decode, urlsafe_b64decode, urlsafe_b64encode。他们8个可以两两分为4组:
一、encode和decode一组,专门用来编码和解码文件的,也可以对StringIO里的数据做编解码;
二、encodestring和decodestring一组,专门用来编码和解码字符串;
三、b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除了英文字母和数字外还有三个字符“+ / =”,其中=只是为了补全编码后的字符数为4的整数,而+和/在一些情况下需要被替换掉,b64encode和b64decode正是提供了这样的功能。至于什么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候;
四、urlsafe_b64encode和urlsafe_b64decode一组,这个就是用来专门对url进行base64编解码的,实际上也是调用的前一组函数。
下面看看例子:
#-*- encoding:utf-8 -*- import base64 import StringIO a = "this is a test" b = base64.encodestring(a) # 对字符串编码 print b print base64.decodestring(b) # 对字符串解码 c = StringIO.StringIO() c.write(a) d = StringIO.StringIO() e = StringIO.StringIO() c.seek(0) base64.encode(c, d) # 对StringIO内的数据进行编码 print d.getvalue() d.seek(0) base64.decode(d, e) # 对StringIO内的数据进行解码 print e.getvalue() a = "this is a +test" b = base64.urlsafe_b64encode(a) # 进行url的字符串编码 print b print base64.urlsafe_b64decode(b)
上面的encode函数和decode函数的参数其实还可以是文件对象的,那的像这样:
f1 = open('aaa.txt', 'r') f2 = open('bbb.txt', 'w') base64.encode(f1, f2) f1.close() f2.close()
用IPython进行查看的情况如下:
1.encode和decode
In [2]: base64.encode?? Type: function String form: <function encode at 0x02871770> File: c:python27libbase64.py Definition: base64.encode(input, output) Source: def encode(input, output): """Encode a file.""" while True: s = input.read(MAXBINSIZE) if not s: break while len(s) < MAXBINSIZE: ns = input.read(MAXBINSIZE-len(s)) if not ns: break s += ns line = binascii.b2a_base64(s) output.write(line)
2.encodestring和decodestring
In [3]: base64.encodestring?? Type: function String form: <function encodestring at 0x028717F0> File: c:python27libbase64.py Definition: base64.encodestring(s) Source: def encodestring(s): """Encode a string into multiple lines of base-64 data.""" pieces = [] for i in range(0, len(s), MAXBINSIZE): chunk = s[i : i + MAXBINSIZE] pieces.append(binascii.b2a_base64(chunk)) return "".join(pieces)
3.b64encode和b64decode
In [4]: base64.b64encode?? Type: function String form: <function b64encode at 0x028714F0> File: c:python27libbase64.py Definition: base64.b64encode(s, altchars=None) Source: def b64encode(s, altchars=None): """Encode a string using Base64. s is the string to encode. Optional altchars must be a string of at least length 2 (additional characters are ignored) which specifies an alternative alphabet for the '+' and '/' characters. This allows an application to e.g. generate url or filesystem safe Base64 strings. The encoded string is returned. """ # Strip off the trailing newline encoded = binascii.b2a_base64(s)[:-1] if altchars is not None: return _translate(encoded, {'+': altchars[0], '/': altchars[1]}) return encoded
4.urlsafe_b64encode和urlsafe_b64decode(调用的也是上面的b64encode和b64decode函数)
In [6]: base64.urlsafe_b64encode?? Type: function String form: <function urlsafe_b64encode at 0x028715F0> File: c:python27libbase64.py Definition: base64.urlsafe_b64encode(s) Source: def urlsafe_b64encode(s): """Encode a string using a url-safe Base64 alphabet. s is the string to encode. The encoded string is returned. The alphabet uses '-' instead of '+' and '_' instead of '/'. """ return b64encode(s, '-_')
《 “Python的base64模块” 》 有 2 条评论
java-判断字符串是否经过base64编码
https://blog.csdn.net/u010637238/article/details/103615589
`
字符串长度是4的倍数
=只会出现在字符串最后,可能没有或者一个等号或者两个等号
字符串只可能包含A-Z,a-z,0-9,+,/,=字符
对于某些字符串可能符合base64编码特征,但是却不是base64编码格式,进行进一步判断,如果解码后含有乱码(即Ascii码不在32~126),说明虽然符合base64编码特征,但是不是base64编码,那么保留原始字符串
`
如何识别是否是base64编码加密
https://blog.csdn.net/qq_46541895/article/details/112503930
如何判断一个字符串是否经过base64加密过?
https://www.zhihu.com/question/20304015
如何判断一个字符串是否经过base64加密过?_判断是否是base64 java-程序员宅基地
https://www.cxyzjd.com/article/Xionghuimin/103208425
How do you decode Base64 data in Python?
https://stackoverflow.com/questions/3470546/how-do-you-decode-base64-data-in-python
How do you decode Base64 data in Python?
https://stackoverflow.com/questions/3470546/how-do-you-decode-base64-data-in-python
`
# Python 3 (and 2)
import base64
a = ‘eW91ciB0ZXh0’
base64.b64decode(a)
`
base64 — Base16, Base32, Base64, Base85 Data Encodings
https://docs.python.org/3/library/base64.html
[…] Python的base64模块https://ixyzero.com/blog/archives/1612.html […]