首页 > 其他分享 >base64编码和解码

base64编码和解码

时间:2023-01-03 12:35:21浏览次数:70  
标签:编码 Base64 字节 二进制 解码 base64


引言:最近做爬虫的时候,解析对方网站中自定义字体时遇到的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-百度百科​


标签:编码,Base64,字节,二进制,解码,base64
From: https://blog.51cto.com/u_13758447/5985261

相关文章