zoukankan      html  css  js  c++  java
  • 第44月第11天 python base64实现

    1.

    import re
    from functools import reduce
    from base64 import b64encode
    
    # 构建base 64 字符映射表
    b64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    b64_mapping = {k: v for k, v in zip(range(64), b64_alphabet)}
    
    # 标准Base64编码
    def b64_encode(bytes_string):
        # 判断参数类型
        if not isinstance(bytes_string, (bytes, bytearray)):
            raise TypeError('Expected "bytes" or "bytearray" object')
    
        # 计算字节字符串长度
        bytes_len = len(bytes_string)
        # 计算要补充的 "=" 的长度
        pad_len = 3 - bytes_len % 3 if bytes_len % 3 else 0
        # 规范化字节字符串,使其长度是3的整数倍
        normalized_bytes_string = bytes_string + b'x00' * pad_len
        # 按照每3个字节一组将规范化的字节字符串进行分组
        bytes_string_list = re.findall(b'.{3}', normalized_bytes_string)
        # 将每组中的3个字节中的每个字节用8位二进制表示,结果为由表示24位二进制数的字符串组成的数组
        bin_string_list = [
            reduce(lambda x, y: x + y,
                   map(lambda h: '0' * (8 - len(bin(h).lstrip('0b'))) + bin(h).lstrip('0b'),
                       item))
            for item in bytes_string_list
        ]
        # 将表示24位二进制的字符串平均分割成四段,每段表示一个6位二进制数
        b64_bin_string_list = [re.findall('.{6}', ele) for ele in bin_string_list]
        # 将嵌套数组扁平化处理,生成base64字符键列表
        b64_key = []
        for i in b64_bin_string_list:
            for j in i:
                b64_key.append(int(j, base=2))
        # 根据base64字符映射表构造最终的base64编码字符串
        b64_string = ''
        for k in b64_key:
            b64_string += b64_mapping[k]
        b64_string = b64_string[:(len(b64_string) - pad_len)] + '=' * pad_len
        b64_bytes_string = b64_string.encode('ascii')
        return b64_bytes_string
    
    # URL安全的Base64编码
    def b64_urlsafe_encode(bytes_string):
        return b64_encode(bytes_string).replace(b'+', b'-').replace(rb'/', b'_')

    https://blog.csdn.net/swinfans/article/details/89458462

    2.

    python 按照固定长度分割字符串的方法

    # 将表示24位二进制的字符串平均分割成四段,每段表示一个6位二进制数
    b64_bin_string_list = re.findall(r'.{6}',bin_string_list)
    print(b64_bin_string_list)
    # 将嵌套数组扁平化处理,生成base64字符键列表
    b64_key = []
    for i in b64_bin_string_list:
        b64_key.append(int(i, base=2))
    
    # 根据base64字符映射表构造最终的base64编码字符串
    b64_string = ''
    for k in b64_key:
        b64_string += b64_mapping[k]
    print(b64_string)   

    https://www.php.cn/python-tutorials-394932.html

  • 相关阅读:
    Codeforces Round #297 (Div. 2)D. Arthur and Walls 暴力搜索
    Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心
    Codeforces Round #297 (Div. 2)B. Pasha and String 前缀和
    Codeforces Round #297 (Div. 2)A. Vitaliy and Pie 水题
    BZOJ 1191: [HNOI2006]超级英雄Hero 匈牙利算法
    Codeforces Round VK Cup 2015
    Codeforces Round #296 (Div. 1) C. Data Center Drama 欧拉回路
    BZOJ 1059: [ZJOI2007]矩阵游戏 匈牙利算法
    UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
    Hibernate自定义字段查询
  • 原文地址:https://www.cnblogs.com/javastart/p/12867572.html
Copyright © 2011-2022 走看看