baidu-reporter/app/utils/custom_base64.py

154 lines
3.0 KiB
Python
Raw Normal View History

2025-03-28 18:23:30 +08:00
import base64
from loguru import logger
class CustomBase64:
"""自定义的Base64编码和解码"""
mapping = {
"Y": "V",
"X": "U",
"A": "Z",
"s": "p",
"J": "G",
"F": "C",
"U": "R",
"u": "r",
"W": "T",
"i": "f",
"V": "S",
"E": "B",
"2": "2",
"P": "M",
"C": "X",
"8": "8",
"r": "o",
"L": "I",
"H": "E",
"M": "J",
"j": "g",
"b": "y",
"p": "m",
"O": "L",
"l": "i",
"R": "O",
"G": "D",
"I": "F",
"y": "v",
"t": "q",
"0": "0",
"c": "x",
"Q": "N",
"7": "7",
"N": "K",
"3": "3",
"Z": "W",
"n": "k",
"1": "1",
"d": "a",
"5": "5",
"S": "P",
"K": "H",
"h": "e",
"k": "h",
"w": "t",
"T": "Q",
"4": "4",
"m": "j",
"z": "w",
"g": "d",
"D": "A",
"v": "s",
"B": "Y",
"/": "/",
"q": "n",
"f": "c",
"a": "z",
"9": "9",
"o": "l",
"e": "b",
"x": "u",
}
reverse_mapping = {
"V": "Y",
"U": "X",
"Z": "A",
"p": "s",
"G": "J",
"C": "F",
"R": "U",
"r": "u",
"T": "W",
"f": "i",
"S": "V",
"B": "E",
"2": "2",
"M": "P",
"X": "C",
"8": "8",
"o": "r",
"I": "L",
"E": "H",
"J": "M",
"g": "j",
"y": "b",
"m": "p",
"L": "O",
"i": "l",
"O": "R",
"D": "G",
"F": "I",
"v": "y",
"q": "t",
"0": "0",
"x": "c",
"N": "Q",
"7": "7",
"K": "N",
"3": "3",
"W": "Z",
"k": "n",
"1": "1",
"a": "d",
"5": "5",
"P": "S",
"H": "K",
"e": "h",
"h": "k",
"t": "w",
"Q": "T",
"4": "4",
"j": "m",
"w": "z",
"d": "g",
"A": "D",
"s": "v",
"Y": "B",
"/": "/",
"n": "q",
"c": "f",
"z": "a",
"9": "9",
"l": "o",
"b": "e",
"u": "x",
}
@staticmethod
def decode(encoded):
std_encoded = "".join(CustomBase64.reverse_mapping.get(c, c) for c in encoded)
if not len(std_encoded) % 4 == 0:
std_encoded = std_encoded + "=" * (4 - len(std_encoded) % 4)
try:
decoded = base64.b64decode(std_encoded).decode()
return decoded
except Exception as e:
logger.error(f"解码错误: {e}")
return None
@staticmethod
def encode(text):
std_encoded = base64.b64encode(text.encode()).decode()
custom_encoded = "".join(CustomBase64.mapping.get(c, c) for c in std_encoded)
2025-03-30 22:49:37 +08:00
return custom_encoded.replace("=", "")