Python对文本做初级加密
Base64是把各个byte分解后,以64个字符替换之。Base64共使用64个字符,再加上padding的=号,最多就是65个字符,加密的方法非常简单,就是每个字符用其他随机字符替换掉。
首先是生成密码本的函数,密码本就是各个字符的对应字符:
import random
def generate_keys():
base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
list_base64_chars = list(base64_chars)
random.shuffle(list_base64_chars)
result = {}
for i, c in enumerate(base64_chars):
result[c] = list_base64_chars[i]
result['='] = '='
result_str = str(result).replace("'", "\"")
return result_str
下面是一个密码本的例子:
{"A": "D", "B": "l", "C": "P", "D": "G", "E": "Y", "F": "o", "G": "s", "H": "0", "I": "M", "J": "t", "K": "f", "L": "I", "M": "d", "N": "U", "O": "X", "P": "L", "Q": "2", "R": "g", "S": "y", "T": "j", "U": "F", "V": "3", "W": "r", "X": "p", "Y": "a", "Z": "u", "a": "1", "b": "/", "c": "n", "d": "A", "e": "E", "f": "O", "g": "x", "h": "N", "i": "K", "j": "+", "k": "W", "l": "H", "m": "Z", "n": "8", "o": "b", "p": "z", "q": "k", "r": "S", "s": "V", "t": "i", "u": "4", "v": "C", "w": "R", "x": "v", "y": "B", "z": "T", "0": "Q", "1": "q", "2": "h", "3": "6", "4": "c", "5": "e", "6": "J", "7": "m", "8": "5", "9": "w", "+": "7", "/": "9", "=": "="}
密码本生成后,需要记录下来,我们的加密和解密都要依靠它:
import base64
import json
KEY_STR = '{"A": "D", "B": "l", "C": "P", "D": "G", "E": "Y", "F": "o", "G": "s", "H": "0", "I": "M", "J": "t", ' \
'"K": "f", "L": "I", "M": "d", "N": "U", "O": "X", "P": "L", "Q": "2", "R": "g", "S": "y", "T": "j", ' \
'"U": "F", "V": "3", "W": "r", "X": "p", "Y": "a", "Z": "u", "a": "1", "b": "/", "c": "n", "d": "A", ' \
'"e": "E", "f": "O", "g": "x", "h": "N", "i": "K", "j": "+", "k": "W", "l": "H", "m": "Z", "n": "8", ' \
'"o": "b", "p": "z", "q": "k", "r": "S", "s": "V", "t": "i", "u": "4", "v": "C", "w": "R", "x": "v", ' \
'"y": "B", "z": "T", "0": "Q", "1": "q", "2": "h", "3": "6", "4": "c", "5": "e", "6": "J", "7": "m", ' \
'"8": "5", "9": "w", "+": "7", "/": "9", "=": "="}'
def base64_encoded(origin_str):
str_ascii = origin_str.encode("ascii")
return base64.b64encode(str_ascii).decode("ascii")
def base64_decoded(encoded_str):
return base64.b64decode(encoded_str).decode("ascii")
def encrypt(origin_str):
b64 = base64_encoded(origin_str)
key_data = json.loads(KEY_STR)
result = ""
for ch in b64:
result += key_data[ch]
return result
def decrypt(encrypted_str):
key_data = json.loads(KEY_STR)
key_dec = {v: k for k, v in key_data.items()}
result = ""
for ch in encrypted_str:
result += key_dec[ch]
return base64_decoded(result)
#below we will test it
origin = """The way I started learning about TCP was, I wrote a TCP stack in Python! \
This was really fun, it didn't take that long, \
and I learned a ton by doing it and writing up what I learned."""
enc_str = encrypt(origin)
dec_str = decrypt(enc_str)
print(enc_str)
print(dec_str)
Console output:
3sNHM0ANEyltM0UQaptQur2x/s3NnZez/ZnxartCAp2x3YU2M0ANnBRxyyl6nZwQuylNMogGFPlTAso+1Blz/Kl2Epgb/hcNMogb1pdxAhoTM0tHarvVEylZArcVMsHQMsgzusc8APlQariHM0gbap2x/sw4uBRxareWMYWx/s3NnZeHuPlNM0gC/KlKEylW/hH4uBlzAPlN/Z2xA6tzAsH4uBlqnPl61soQMYWx/s3NnZeHuPc=
The way I started learning about TCP was, I wrote a TCP stack in Python! This was really fun, it didn't take that long, and I learned a ton by doing it and writing up what I learned.