爬虫随笔(五) 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)

再次声明

  本文未经允许禁止转载,禁止任何修改后二次传播,擅自使用本文的讲解的技术而导致的任何意外,作者均不负责,若有侵权,请立刻联系我删除

posted @   Liyukio  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示