Python3笔记2017.12.03

base64加解密原理

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

现将字符串转化为二进制

for ch in'ABC': (bin(ord(ch))[2:]).zfill(8)

六位六位取

>>>for ch in'ABC':
string+=(bin(ord(ch))[2:]).zfill(8)

base64=[]
for i in range(4)

转换

>>>binascii.unhexlify('454647')

b'EFG'

>>>int('a',16) 16表示进制

10

binstr='454647'
for ch in binstr: (bin(int(ch,16)))[2;].zfill(4)

练习题目

解题——base64 CTF

flag='nctf' total=3**10 import base64 as b64 alg={'0':lambda x:b64.b16decode(x),'1':lambda x:b64.b32decode(x),'2':lambda x:b64.b64decode(x)} temp='' for i in range(total): k=i for j in range(10): cipertext=(alg[str(k%3)](cipertext) k//3 if flag in cipertext: print'OK'
注:参数validate默认为False。如果它为True时,base64模块在进行解码前会先检查s中是否有非base64字母表中的字符,如果有的话则抛出错误binascii.Error: Non-base64 digit found

-------------本文结束感谢您的阅读-------------