base16,32,64base编码和解码⽅法
base16,32,64 base编码和解码⽅法
在⽹络传⼊字符串过程中,如果编码⽅式是基于ASCII,那么会造成什么问题?⽐如:url地址中存在"/"(如:www.csdn/nav/ai),字符串中编码中也存在"/",这样就会出现错误地址解析.为了防⽌这种情况的出现,出现了Base16,Base32,Base64编码⽅式.我们知道计算机传输的单位是字节,也就是8个⽐特位,按照⼀个字节编码的⽅式结果就有256种状态(每个⽐特位0或者1两种状态,8位就是=256),ASCII编码是将8个⽐特位中最⾼位置为0,所以总共可表⽰128个字符(即=128).为了避免冲突,去掉⼀些特殊字符,重新编码.例如Base16编码,编码后的字符只会在(09,A F)
中,Base32编码后字符就会在(A~Z, 2~7)中以及填充符"="中出现.
Base16编码是包含了数字(09)和⼤写字母(A F),Base32编码与Base64编码最⼤区别是前者没有⼩写字母.Base32编码可以⽤于⽂件系统的名称(不区分⼤⼩情况).⽽Base64编码后数据量相⽐原先不是增加很多,可以⽤于⽹络传输.(⽐如下载链接)
base64
Base64是⽹络上最常见的⽤于传输8Bit字节码的编码⽅式之⼀,Base64就是⼀种基于64个可打印字符来
表⽰⼆进制数据的⽅法。可查看RFC2045~RFC2049,上⾯有MIME的详细规范。
Base64编码是从⼆进制到字符的过程,可⽤于在HTTP环境下传递较长的标识信息。采⽤Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被⼴泛应⽤于计算机的各个领域,然⽽由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应⽤场景⼜分别研制了Base64的各种“变种”。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位⾼位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要⽐原来的长1/3。
规则
关于这个编码的规则:
①.把3个字节变成4个字节。
②每76个字符加⼀个换⾏符。
③.最后的结束符也要处理。
python – a85encode和b85encode有什么区别?
Ascii85是Base85的前⾝;两者之间的主要区别实际上是使⽤的字符集.
Ascii85使⽤字符集:
ASCII 33 ("!") to ASCII 117 ("u")
Base85使⽤字符集:
0–9, A–Z, a–z, !#$%&()*+-;<=>?@^_{|}~`
这些字符特别不包含在Base85中:
`"',./:[]\`
a85encode和b85encode分别编码/解码Ascii85和Base85.
前⾔
python当中有关base16、base32和base64的编码及解码⽅法,须使⽤base64库,这个库是下载python时⾃带的,直接import即可
函数介绍
在使⽤编码的函数之前,需要对字符串进⾏utf-8编码⼀下,不然python的base64库的函数没法识别对应的字符串⽽报错
函数介绍
base64.b16encode(字符串) 对字符串进⾏base16编码
base64.b16decode(字符串) 对字符串进⾏base16解码
base64.b32encode(字符串) 对字符串进⾏base32编码
base64.b32decode(字符串) 对字符串进⾏base32解码
base64.b64encode(字符串) 对字符串进⾏base64编码
base64.b64decode(字符串) 对字符串进⾏base64解码
算法
base16
编码或解码后的字符串前会带⼀个⼩写的b标识,进⾏编码之前需要设置字符串为utf-8,解码时不需要
编码⽅法:base64.b16encode(字符串)
解码⽅法:base64.b16decode(字符串)
base32
编码或解码后的字符串前会带⼀个⼩写的b标识,进⾏编码之前需要设置字符串为utf-8,解码时不需要编码⽅法:base64.b32encode(字符串)
解码⽅法:base64.b32decode(字符串)
base64
编码或解码后的字符串前会带⼀个⼩写的b标识,进⾏编码之前需要设置字符串为utf-8,解码时不需要编码⽅法:base64.b64encode(字符串)
解码⽅法:base64.b64decode(字符串)
base64_encode(data: bytes)
def base64_encode(data: bytes) -> bytes:
"""Encodes data according to RFC4648.
RFC4648
代码
[base16.py]{..\src\ciphers\base16.py}
[base32.py]{..\src\ciphers\base32.py}
[base64_encoding.py]{..\src\ciphers\base64_encoding.py}
[base85.py]{..\src\ciphers\base85.py}
"""
Prepare
1. sys.path 中增加 TheAlgorithms\src ⼦模块
"""
import sys
sys.path.append('E:\dev\AI\TheAlgorithms\src')
案例⼀: base16
Encodes a given utf-8 string into base-16.
>>> encode_to_b16('Hello World!')
b'48656C6C6F20576F726C6421'
>>> encode_to_b16('HELLO WORLD!')
b'48454C4C4F20574F524C4421'
>>> encode_to_b16('')
b''
from ciphers.base16 import encode_to_b16
import base64
"""
"""
t = encode_to_b16('Hello World!')
print(type(t))
print (t) # b'48656C6C6F20576F726C6421'
print(base64.b16decode(t))
t = encode_to_b16('HELLO WORLD!')
print (t) # b'48454C4C4F20574F524C4421'
print(base64.b16decode(t))
t = encode_to_b16('')
print (t) # b''
print(base64.b16decode(t))
<class 'bytes'>
b'48656C6C6F20576F726C6421'
b'Hello World!'
b'48454C4C4F20574F524C4421'
b'HELLO WORLD!'
b''
b''
案例⼆: base32
base64.b32encode
base64.b32dncode
import base64
# inp = input("->")
inp = "erwerwerwerwe"
encoded = de("utf-8") # encoded the input (we need a bytes like object)
b32encoded = base64.b32encode(encoded) # b32encoded the encoded string
print("b32encode:"+str(b32encoded))
print("b32decode:"+base64.b32decode(b32encoded).decode("utf-8")) # decoded it
b32encode:b'MVZHOZLSO5SXE53FOJ3WK==='
b32decode:erwerwerwerwe
案例三: base64
base64.b64encode
base64.b64dncode
def base64_encode(data: bytes) -> bytes:
"""Encodes data according to RFC4648.
from ciphers.base64_encoding import base64_encode,base64_decode
from base64 import b64encode,b64decode
"""
"""
a = b"This pull request is part of Hacktoberfest20!"
b = b"/html/rfc4648"
c = b"A"
print("a: "+str(a))
print ("base64_encode(a): " + str(base64_encode(a)))
print("base64_encode(a) == b64encode(a) :"+str(base64_encode(a) == b64encode(a))) # True print("b: "+str(b))
print ("base64_encode(b): " + str(base64_encode(b)))
print("base64_encode(b) == b64encode(b) :"+str(base64_encode(b) == b64encode(b))) # True print("c: "+str(c))
print ("base64_encode(c): " + str(base64_encode(c)))
print("base64_encode(c) == b64encode(c) :"+str(base64_encode(c) == b64encode(c))) # True
a = "VGhpcyBwdWxsIHJlcXVlc3QgaXMgcGFydCBvZiBIYWNrdG9iZXJmZXN0MjAh"
b = "aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDg="
c = "QQ=="
print("a: "+str(a))
print ("base64_decode(a): " + str(base64_decode(a)))
print("base64_dncode(a) == b64dncode(a) :"+str(base64_decode(a) == b64decode(a))) # True print("b: "+str(b))
print ("base64_decode(b): " + str(base64_decode(b)))
print("base64_dncode(b) == b64dncode(b) :"+str(base64_decode(b) == b64decode(b))) # True print("c: "+str(c))
print ("base64_decode(c): " + str(base64_decode(c)))
print("base64_dncode(c) == b64dncode(c) :"+str(base64_decode(c) == b64decode(c))) # True
# base64_decode("abc") # AssertionError: Incorrect padding
a: b'This pull request is part of Hacktoberfest20!'
base64_encode(a): b'VGhpcyBwdWxsIHJlcXVlc3QgaXMgcGFydCBvZiBIYWNrdG9iZXJmZXN0MjAh' base64_encode(a) == b64encode(a) :True
b: b'/html/rfc4648'
base64_encode(b): b'aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDg='
base64_encode(b) == b64encode(b) :True
c: b'A'
base64_encode(c): b'QQ=='
base64_encode(c) == b64encode(c) :True
a: VGhpcyBwdWxsIHJlcXVlc3QgaXMgcGFydCBvZiBIYWNrdG9iZXJmZXN0MjAh
base64_decode(a): b'This pull request is part of Hacktoberfest20!'
base64_dncode(a) == b64dncode(a) :True
b: aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDg=
base64_decode(b): b'/html/rfc4648'
base64_dncode(b) == b64dncode(b) :True字符串函数库下载
c: QQ==
base64_decode(c): b'A'
base64_dncode(c) == b64dncode(c) :True
案例四: base64.a85encode
import base64
inp = "dewewew"
# inp = input("->")
encoded = de("utf-8") # encoded the input (we need a bytes like object) a85encoded = base64.a85encode(encoded) # a85encoded the encoded string print(a85encoded)
print(base64.a85decode(a85encoded).decode("utf-8")) # decoded it
b'A7]srG@bs'
dewewew
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论