easy_base
密文:=0XezFWZfNXafRjNlNXYit3dvh2cmR3Y
等号在前面,直接倒序后解码
ctfshow{base64_is_easy}
代码解:
s = '=0XezFWZfNXafRjNlNXYit3dvh2cmR3Y'
print(s[::-1]) #翻转字符串
print(s[::-1]) #翻转字符串
print(s[::-1]) #翻转字符串
#Y3Rmc2hvd3tiYXNlNjRfaXNfZWFzeX0=
#ctfshow{base64_is_easy}
天知地知
电话号码加密
好不容易要到了妹子手机号,却是加密的,怎么办,兄弟们很急,在线等!听说妹子是佛山的 加密后的手机号:
(+86)981935301754
格式ctfshow{妹子手机号} 提交的时候,不用+86, * 不要给机主打电话,更不要骚扰机主,不然我报警啦*
分析发现,电话是12位的,而且是9开头,那么国内绝大部分手机号是1开头,所以用10相减就是1了
然后12位,所以减去的数要比他大,所以被减数就是13位,第一位是1,后面12位是0,得到1000000000000
print("ctfshow{"+str(1000000000000-981935301754)+"}")
#ctfshow{18064698246}
凯撒密码:
题目:
from string import ascii_lowercase
from random import shuffle,randint
table=list(ascii_lowercase)
shuffle(table)
flag='ctfshow{xxx}'
key=randint(0,25)
text=[]
for i in flag:
if i in table:
text.append(table[(table.index(i)+key)%26])
else:
text.append(i)
print(table)
print(text)
# ['h', 'g', 'u', 'p', 'o', 'v', 'n', 'b', 'i', 'j', 'y', 'k', 'a', 'z', 'w', 'q', 't', 'l', 'r', 'd', 'x', 'e', 's', 'm', 'c', 'f']
# ['r', 'y', 'd', 't', 'x', 'c', 'i', '{', 'y', 'x', '1', 't', '_', 'u', 't', '_', 'z', '1', 'd', 'd', 'a', 'q', 'h', 'y', '_', 'r', '4', 'q', 't', 'n', 'a', '!', '!', '}']
wp:主要考查代码能力
代码解释:
from string import ascii_lowercase
from random import shuffle,randint
#1.前面的引入模块,不用管
table=list(ascii_lowercase)
"""
2.在这行代码中,table = list(ascii_lowercase) 的作用是将 ascii_lowercase 字符串转换为一个字符列表,并赋值给变量 table;(将字符串转化为列表)
ascii_lowercase 是一个字符串,它包含了所有的小写英文字母,按顺序排列,即 'abcdefghijklmnopqrstuvwxyz'。通过使用 list() 函数,这个字符串被转换成一个列表,其中每个元素都是字符串中的一个字符。因此,table 会变成一个包含26个小写英文字母的列表。
"""
shuffle(table)
# 3.打乱这个列表,作为替换表
flag='ctfshow{xxx}'
key=randint(0,25)
"""
4.在这行代码中,key = randint(0, 25) 是用于生成一个随机整数key,其值在0到25之间(包含0和25)。这个随机整数在接下来的加密过程中将作为密钥使用。
"""
text=[]
for i in flag:
if i in table:
text.append(table[(table.index(i)+key)%26])
"""
5.因为英文字母表只有26个字母,所以我们需要确保加密后的索引仍然落在字母表的范围内。使用模运算(%)可以确保结果是一个0到25之间的数,无论table.index(i) + key的和有多大。这样做是为了防止索引超出字母表的边界,并实现一个循环移位的效果。
"""
else:
text.append(i)
#6.添加i到text列表(数组)中
print(table)
print(text)
# ['h', 'g', 'u', 'p', 'o', 'v', 'n', 'b', 'i', 'j', 'y', 'k', 'a', 'z', 'w', 'q', 't', 'l', 'r', 'd', 'x', 'e', 's', 'm', 'c', 'f']
# ['r', 'y', 'd', 't', 'x', 'c', 'i', '{', 'y', 'x', '1', 't', '_', 'u', 't', '_', 'z', '1', 'd', 'd', 'a', 'q', 'h', 'y', '_', 'r', '4', 'q', 't', 'n', 'a', '!', '!', '}']
运用for循环爆破key,其他一切正常,看似难,实则简单
table=['h', 'g', 'u', 'p', 'o', 'v', 'n', 'b', 'i', 'j', 'y', 'k', 'a', 'z', 'w', 'q', 't', 'l', 'r', 'd', 'x', 'e', 's', 'm', 'c', 'f']
text=['r', 'y', 'd', 't', 'x', 'c', 'i', '{', 'y', 'x', '1', 't', '_', 'u', 't', '_', 'z', '1', 'd', 'd', 'a', 'q', 'h', 'y', '_', 'r', '4', 'q', 't', 'n', 'a', '!', '!', '}']
# 爆破秘钥
for key in range(0,26):
flag=''
for i in text:
if i in table:
flag+=(table[(table.index(i)+key)%26])
else:
flag+=i
print(str(flag))
# ctfshow{th1s_is_d1ffrent_c4esar!!}