Base64编码是将二进制数据转换为ASCII字符串格式的过程,通过将该二进制数据转换为
6位字符表示。当二进制数据(如图像或视频)在设计用于以
纯文本(ASCII)格式传输数据的系统上传输时,使用
Base64编码方法。
请点击link了解更多关于理解和使用base64
编码的详细信息。
对于那些想要从头开始实现base64
编码以便理解的人,这里提供了将字符串编码为base64
的代码。
encoder.py
class Base64Encoder:
base64Encoding:list = None
def encode(data)->str:
if not isinstance(data, str) and not isinstance(data, bytes):
raise AttributeError(f"Expected {type('')} or {type(b'')} but found {type(data)}")
if isinstance(data, str):
data = data.encode("ascii")
if Base64Encoder.base64Encoding == None:
Base64Encoder.base64Encoding = list()
for key in range(0, 26):
Base64Encoder.base64Encoding.append(chr(key + 65))
for key in range(0, 26):
Base64Encoder.base64Encoding.append(chr(key + 97))
for key in range(0, 10):
Base64Encoder.base64Encoding.append(chr(key + 48))
Base64Encoder.base64Encoding.append('+')
Base64Encoder.base64Encoding.append('/')
if len(data) == 0:
return ""
length=len(data)
bytes_to_append = -(length%3)+(3 if length%3 != 0 else 0)
binary_list = []
for s in data:
ascii_value = s
binary = f"{ascii_value:08b}"
for bit in binary:
binary_list.append(bit)
length=len(binary_list)
bits_to_append = -(length%6) + (6 if length%6 != 0 else 0)
binary_list.extend([0]*bits_to_append)
base64 = []
value = 0
for index, bit in enumerate(reversed(binary_list)):
value += ( 2**(index%6) if bit=='1' else 0)
if (index+1)%6 == 0:
base64.append(Base64Encoder.base64Encoding[value])
value = 0
pass
return ''.join(reversed(base64))+''.join(['=']*bytes_to_append)
testEncoder.py
from encoder import Base64Encoder
if __name__ == "__main__":
print(Base64Encoder.encode("Hello"))
print(Base64Encoder.encode("1 2 10 13 -7"))
print(Base64Encoder.encode("A"))
with open("image.jpg", "rb") as file_data:
print(Base64Encoder.encode(file_data.read()))
输出:
$ ./testEncoder.py
SGVsbG8=
MSAyIDEwIDEzIC03
QQ==