Python:base64随机编码和解码

Python学习实例:base64随机编码和解码

    • 问题描述
    • 随机编码加密flag
    • 使用异常处理恢复明文
      • 解码时出现问题的思考
      • 解码程序
    • 使用重新编码恢复明文
      • 10次循环解码方案
      • 解码程序
      • 改进:使用函数递归简化10层循环程序
    • base16,base32,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 = 

你可能感兴趣的:(Python,base64,base32,base16)