1 import base64
2 import random
3
4 class MyBase64(object):
5
6 STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7
8 def __init__(self, alphabet=None):
9 if alphabet == None:
10 alphabet = MyBase64.STANDARD_ALPHABET
11 if len(alphabet) != len(MyBase64.STANDARD_ALPHABET):
12 raise RuntimeError('MyBase64 init error:alphabet len should equal 64')
13 self.alphabet = alphabet
14
15 def encode(self, data:str):
16 encoded = base64.b64encode(data.encode('utf-8')).decode('utf-8')
17 return encoded.translate(str.maketrans(MyBase64.STANDARD_ALPHABET, self.alphabet))
18
19 def decode(self, data:str):
20 encoded = data.translate(str.maketrans(self.alphabet, MyBase64.STANDARD_ALPHABET))
21 return base64.b64decode(encoded).decode('utf-8')
22
23 @staticmethod
24 def random_alphabet():
25 temp = MyBase64.STANDARD_ALPHABET
26 out = ''
27 while (True):
28 size = len(temp)
29 if size <= 0:
30 break
31 index = random.randint(0, size - 1)
32 out = out + temp[index]
33 if index + 1 >= size:
34 temp = temp[0:index]
35 else:
36 temp = temp[0:index] + temp[index + 1:]
37 return out
38 alphabet = 'uZvw0jGtx19E7O4STKfoblygzNcYiPUkQ+63DhWXVL2dAC5rJHIeFsmapRq/MBn8'
39
40 mybase64 = MyBase64(alphabet)