首页 > 技术文章 > BMZCTF:2018 护网杯 迟来的签到题

cute-puli 2022-03-22 00:07 原文

 

字符串常量

(1)不依赖于语言环境:
string.ascii_letters ==>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase ==> 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase ==> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

(2)依赖于语言环境,并在locale.setlocale()调用时更新:
string.letters ==> 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.lowercase ==> 'abcdefghijklmnopqrstuvwxyz'
string.uppercase ==> ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’

(3)
string.digits ==> '0123456789'
string.hexdigits ==> '0123456789abcdefABCDEF'
string.octdigits ==> '01234567'

(4)ASCII字符的字符串,在C语言环境中被视为标点字符:
string.punctuation ==> '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'

(5)包含所有被视为空格的字符的字符串。在大多数系统中,包括字符空间,制表符,换行符,返回页面,换页符和垂直选项卡
string.whitespace ==> '\t\n\x0b\x0c\r '

(6) 可打印的字符串:
string.printable ==> 这是一个组合 (digits+letters+punctuation+whitespace)
‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ \t\n\x0b\x0c\r ’

 

解题代码

import string
from base64 import *

flag = ''
code = b64decode('AAoHAR1TIiIkUFUjUFQgVyInVSVQJVFRUSNRX1YgXiJSVyJQVRs=')
for char in string.printable:
    for num in code:
        flag += chr(ord(char)^num)
    print(flag)

  

 

 

 

 

 

  先对该加密的文档进行base64解密,然后再使用其加密的文本中的每一位ascii码与可打印的字符串的ascii值进行异或,然后拼接起来,打印出来即可。

推荐阅读