Python学习实例:base64随机编码和解码
问题描述
jxb撰写本文的目的,在于总结一次编写Python程序及其延申学习的过程,主要涉及:
- 导入base64模块,使用10次随机编码来加密一段数据;
- 使用异常处理的方式恢复明文;
- 针对解码时出现问题的思考;
- 使用10层循环的解密;
- 使用递归函数改进10层循环方案;
- base16,base32,base64编码过程的理解实例;
随机编码加密flag
思路:进行10次循环,每层循环在0,1,2中随机选择1个数字作为列表list中的序号,列表的每个元素是一个进行base16、base32或者base64编码的匿名函数,编码结果作为下一层编码的输入。
from base64 import *
import random
flag = "flag{**jxb**}".encode("utf-8")
#使用encode("utf-8"),是把str型转为bytes型,base64等编码时需要二进制数据
list = [lambda x:b16encode(x),lambda x:b32encode(x),lambda x:b64encode(x)]
for i in range(10):
choice = random.choice([0,1,2])
flag =list[choice](flag)
with open('encoded.txt','w') as fp:
fp.write(flag.decode("utf-8"))
使用字典实现上述功能的对应改动:
encode={
'16':lambda x:b16encode(x),
'32':lambda x:b32encode(x),
'64':lambda x:b64encode(x)
} #列表实现中的list
choice = random.choice(['16','32','64'])
flag =encode[choice](flag)
使用异常处理恢复明文
解码时出现问题的思考
from base64 import *
flag1 = "jxbh*".encode("utf-8")
test1 = b32encode(flag1)
print(b64decode(test1))
#运行结果:
# b'4\x9e\x06\x13`J'
# base16:ASCII字符