爬虫随笔(五) base64
声明
本账号中的所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁,用于商业用途和非法用途,否则有此产生的一切后果均与作者无关!
base64 介绍
base64由26个大小写字母以及0-9数字还有+,/两个字符构成(26*2+10+2)总共64个编码,在使用中有些网站会使用bs64变种,也就是说把其中+变成-,/变成_ 这样可以避免某些歧义。具体编码形式可以看以下网站
https://www.json.cn/document/base64/
bs64如何编码
众所周知,我们使用的文本编码一般来说是ascii编码格式,他是一个字节八位的形式储存,bs64是由6位的形式储存,再不足6位时补足6位,在不足四个字符时补足4个字符,也就是编码后一定是4的倍数,不足4的倍数则在最后补充=。比如以下代码,运行结果为eQ==
import base64
s = 'y'
encodings = base64.b64encode(s.encode())
print(encodings)
bs64如何解码
同样的,在对一个字符串进行bs64解码的时候,需要这个字符串的长度是4的倍数,也就是不足4的倍数在后面补足。比如对上述的eQ进行解码,如果不带会报以下错误,加上==即可正常得到y
binascii.Error: Incorrect padding
一些疑惑
在使用的bs64编码时,为什么六位0的时候得到的答案不是A而是=?我个人认为,在编码时bs64在其中会判断目前位数是否使用,在我们打入\0空字符的时候,我们会发现y\0\0得到的bs64编码变了,正常空字符的ascii码得到的值是八位0,我们可以得到正常的A,比如以下代码执行。我们可以得到我们想要运行的eQAA,而且我们解码以后也会带着这个null字符一起输出的
s = 'y\0\0'
encodings = base64.b64encode(s.encode())
print(encodings)
再次声明
本文未经允许禁止转载,禁止任何修改后二次传播,擅自使用本文的讲解的技术而导致的任何意外,作者均不负责,若有侵权,请立刻联系我删除
本文来自博客园,作者:Liyukio,转载请注明原文链接:https://www.cnblogs.com/Liyukio/p/18744588
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义