Sud0G
Sud0G
发布于 2024-06-23 / 43 阅读
0
0

Base64编码原理

Base介绍

Base64将每三个8位字节(即24位)的二进制数据划分为四个6位的单元。每个6位单元可以表示的范围是0到63,这些数字映射到一组固定的64个字符。

把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),再根据每个字节的值,用base64编码表中的值替换,不足4个字节的,补“=”。编码得到的字符串长度必为4的倍数。

编码规则步骤

  1. 将待编码字符串各个字符换为对应ASCII码值

  2. 将得到的ASCII码值转换为8位二进制

  3. 将得到的8位二进制序列分割为6位一组(不足6位的末尾添0补上)

  4. 将每个6位二进制数列转换为十进制数字

  5. 将转换所得的十进制值对应Base64编码表中的字符进行替换

  6. 若编码所得字符串长非4倍,添一个或两个“=”补上

示例

解码规则步骤

  1. 将待解码字符串中的字符对应查找Base64编码表中的序列值(末尾的“=”直接忽略)

  2. 将所得对应序列值转换为6位二进制字串

  3. 将所有6位二进制字串按8位分割

  4. 将每个8位二进制字串转换为十进制

  5. 十进制值对应的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()


评论