Base介绍
Base64将每三个8位字节(即24位)的二进制数据划分为四个6位的单元。每个6位单元可以表示的范围是0到63,这些数字映射到一组固定的64个字符。
把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),再根据每个字节的值,用base64编码表中的值替换,不足4个字节的,补“=”。编码得到的字符串长度必为4的倍数。
编码规则步骤
将待编码字符串各个字符换为对应ASCII码值
将得到的ASCII码值转换为8位二进制
将得到的8位二进制序列分割为6位一组(不足6位的末尾添0补上)
将每个6位二进制数列转换为十进制数字
将转换所得的十进制值对应Base64编码表中的字符进行替换
若编码所得字符串长非4倍,添一个或两个“=”补上
示例
解码规则步骤
将待解码字符串中的字符对应查找Base64编码表中的序列值(末尾的“=”直接忽略)
将所得对应序列值转换为6位二进制字串
将所有6位二进制字串按8位分割
将每个8位二进制字串转换为十进制
十进制值对应的ASCII字符串即为结果
示例
ASCII转换脚本
def decimal_to_binary(n):
if n == 0:
return "0"
binary = []
while n > 0:
remainder = n % 2
binary.append(str(remainder))
n = n // 2
binary.reverse()
return ''.join(binary)
while True:
data = input("[-]请输入你想转换的字符(输入 'exit' 退出程序): ")
if data.lower() == 'exit':
print("[-+-]程序已退出")
break
elif len(data) != 1:
print("[*]请输入一个字符")
continue
ascii_code = ord(data)
binary_representation = decimal_to_binary(ascii_code)
print(f"[+]字符 {data} 的ASCII码是 {ascii_code}, 二进制表示为: {binary_representation}")
Base原理编解码
base64_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
# 编码函数
def base64_decode(data):
# 计算输入字符串长度除以3的余数
n = len(data) % 3
x = ''.join(['{:08b}'.format(ord(c)) for c in data])
if n:
# 如果长度不是3的倍数,补足0使其成为3的倍数
x += '0' * (3 - n) * 8
# 按6位一组,将二进制字符串转换为 Base64 字符
out = ''.join([base64_table[int(x[i:i + 6], 2)] for i in range(0, len(x), 6)])
if n:
# 补上'='使编码后的长度为4的倍数
out = out[:-((3 - n) * 2)] + '=' * (3 - n)
return out
def base64_encode(data):
data = data.strip()
data = data.rstrip('=')
x = ''.join(['{:06b}'.format(base64_table.index(c)) for c in data])
out = ''.join([chr(int(x[i:i + 8], 2)) for i in range(0, len(x), 8) if int(x[i:i + 8], 2) != 0])
return out
def main():
while True:
print('1.base64_encode || 2.base64_decode')
print('3.exit')
choice = input('input your choice number:')
print('===================================')
if choice == '1':
data = input('please input the encode data:')
print('encode_results:', base64_encode(data))
print('=====================================')
elif choice == '2':
data = input('please input the decode data:')
print('decode_results:', base64_decode(data))
print('=====================================')
elif choice == '3':
print('see you next time!')
break
main()