这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/107812970
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
Python实现Base64编码(自己手工写)
00. 关于Base64概述
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
---|
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | | |
14 | O | 31 | f | 48 | w | | |
15 | P | 32 | g | 49 | x | | |
16 | Q | 33 | h | 50 | y | | |
- 对输入的字符,每3个字节断开组成一组。对每一组中的三个字节,按照每
6个bit
断开成4
段 2**6 =64
,因此有了base64
编码表- 每一段当作一个
8bit
看其索引值,这个值就是Base64
编码表的索引值,找到对应字符。 - 再次取
3
个字节,同样处理,直到最后
def
对应的ascii
码为:0x64
,0x65
,0x66
01100100
,01100101
,01100110
011001
,000110
,010101
,100110
25
,6
,21
,38
ZGVm
- 末尾的处理
- 正好
3
个字节,处理同上 - 剩下
1
个或者2
个字节,用0
补满3
个字节 - 补
0
的字节用=
表示
01. 解析
def base64(src):
ret = bytearray("", encoding="utf-8")
length = len(src)
r = 0
for offset in range(0, length, 3):
if offset+3 <= length:
triple = src[offset:offset+3]
else:
triple = src[offset:]
r = 3 - len(triple)
triple = triple + "\x00"*r
b = int.from_bytes(triple.encode(), "big")
for i in range(18, -1, -6):
if i == 18:
index = b >> i
else:
index = b >> i & 0x3f
ret.append(alphabet[index])
for i in range(1, r+1):
ret[-i] = 0x3D
return ret
if __name__ == "__main__":
alphabet = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(base64("how areyou").decode("utf-8"))
aG93IGFyZXlvdQ==
写在最后的话:
- 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
- 欢迎关注我的CSDN博客,IDYS’BLOG
- 持续更新内容:
linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算 - 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!