base64编码和解码

版权声明:个人博客:yjz.life 欢迎前来交流!~本篇文章未经同意请勿转载! https://blog.csdn.net/m0_38072683/article/details/84140394

引言:最近做爬虫的时候,解析对方网站中自定义字体时遇到的base64解码问题,对这个一直不理解,今天学习一下,总结一下。

base64

Base64是一种任意二进制到文本字符串的编码方法,基于64个可打印字符来表示二进制数据的方法。

  • 例如迅雷的下载链接就就行了base64编码。
    • 迅雷专用地址:thunder://QUFodHRwOi8vc29zb2J0LmNvbS9aWg==
    • 真是文件下载链接:http://sosobt.com/

简述

Base64编码就是从二进制字符的过程。

采用Base64编码具有不可读性,需要解码后才能阅读。

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的/+字符变形为形如"%xx"的形式。

Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。

Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

优点: 速度快,ascii字符,肉眼不可理解
缺点: 编码比较长,非常容易被破解,仅适用于加密非关键信息的场合

原理

用一句话概述就是:把3字节的二进制数据编码成4字节的文本数据

  • 如果编码的二进制数据不是3的倍数,最后剩下1个或2个字节的时候,用\x00字节在末尾补足后,再在编码的末尾加上1或2个=号,表示补了多少字节,解码的时候会自动去掉。

内存一个字节占8位。

转之前:s13

转为ascii:115 49 51

转为二进制:01110011 00110001 00110011

6位为一组(4组):011100 110011 000100 110011

高位补0(一组八位):00011100 00110011 00000100 00110011

得出10进制:28 51 4 51

查表找出对应字符:c z E z

Python中的base64

需要import base64这个module,

该module中有6个函数用于Base64的编码和解码,分成三组来说:

base64.b64decode(s, altchars=None, validate=False) 解码
base64.b64encode(s, altchars=None) 编码

altchars参数必须是长度为2的字节包,会用于替换编码后数据中的+/

validate参数默认为False,如果为True,在解码前会检验s中是否有非base64字母表中的字符,如果有的话,报错。

base64.standard_b64encode(s)
base64.standard_b64decode(s)

这一组方法分别对应上一组方法(相当于b64decode(s)、b64encode(s))

base64.urlsafe_b64decode(s)

base64.urlsafe_b64encode(s)

该组编码后会将输出数据中的’+’和’/’替换为’-‘和’’。解码前则将数据中的’-‘和’’替换为’+’和’/’。(适合在URL中用)

参考资料

廖雪峰官方网站

base64-百度百科

猜你喜欢

转载自blog.csdn.net/m0_38072683/article/details/84140394