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 […]