Bootstrap

Python:base64随机编码和解码

问题描述

jxb撰写本文的目的,在于总结一次编写Python程序及其延申学习的过程,主要涉及:

  1. 导入base64模块,使用10次随机编码来加密一段数据;
  2. 使用异常处理的方式恢复明文;
  3. 针对解码时出现问题的思考;
  4. 使用10层循环的解密;
  5. 使用递归函数改进10层循环方案
  6. 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字符
;