今天开始我的ctf crypto生涯了,之后会陆续从各大平台找一些密码的题目来做,先从萌新杯入手!
说明一下,懒得调整字体啥的~~
签到题:
佬说了,Ao(mg就是flag用base85编码之后的表示形式,在这里可以从网站上直接base85解码,也可用python中的base64库解码,但解码的时候遇到一个有趣的问题
import base64
a="Ao(mgHX^E)AN2PSBOu3qI0o"
a=base64.b85decode(a)
print(a)
#b' \xf9,96"\xaa\x96\x1f\xf4\xf7\x10# \xc7~8\x06'
可以看到用base85解码得到的不是flag,这是怎么回事?
我又试了一下flag用这个base85编码之后得到的是 b'W^7?+',也不是Ao(mg哇,百思不得其解的我找到大佬问了一下,得知base85有好多编码表??
在python的base64库里还有一种方式,是a85.encode()!
我特意上网搜了一下a85和b85的区别--它们的区别在于用于编码的字符映射等细节
大体意思是,在a85encode中,映射ascii顺序中的所有字符,bsae85里用的字符集顺序和种类都不同吧,网上大多推荐使用a85encode,那我们就用a85再写一次!
import base64
a="Ao(mgHX^E)AN2PSBOu3qI0o"
a=base64.a85decode(a)
print(a)
得到flag
抱我:
给的是一个py文件,打开如下:
import random
cstring = 'abcdefghijklmnopqrstuvwxyz{}_0123456789'
key = 'flag{********}'
length = 300
def encode():
res = ''
for i in range(1, length):
c = random.randint(0, 36)
res += cstring[c]
for n in range(10):
c = random.randint(0, len(key) - 1)
res += key[c]
return res
#qdfl33{6{6gs3afa6{3}agf{}aagdf}6fl36d{dfl{6ay6gafddfg}{j3f}}6la{3}bfdf3}gla}65}lg6g6dflf0{dfgd3fdfgc{g6a}a3{6}mfa{}f}f}}}3363}}f6a6a7g{a}g66{d3xgfffg}a}3}_{lad}a33ga5fd33}{
{dl}{}f{3da}g}3egfal{a3l}3f33}dfdda{3sa{d6g{ff}6vgl33d6g333h{gd{
{lg6ldg{ad{3333a6oalf6a{33{de3{fa}ggl{abfd}6}6}}l33fa}f{
{3{3fla}a6}af}{amg}{
{d}}a6gallfg36{g3dh{
{
{a{lfg3{sll6g6gfaggid6d{3afl}3rff3gfad3d}1dlllff6}6}h3g66gla336b{6d3gf}f{30d63l}3dfl6a3llfgld3{}qg}gf}dg{6l}3gal}agdl6{lg{g}ddfaaealf{f3llgge3ad3{3adf{c}fllf6f}3at{aag}a66d3}ad{dfg{}dlz6gld}6{3flxgf{3g3ald}3g}g63f6ggf3}gfd}f3ga3efllf6}363fu6