攻防世界 Crypto 新手练习区 1-12 全详解

前言

本篇是攻防世界 Crypto 新手练习区的全解

1、base64

下下来一个txt
打开是最基础的base64

在这里插入图片描述

直接解就是了

在这里插入图片描述

2、Caesar

下下来一个txt

在这里插入图片描述

由小写字母,{},_构成
结合题目
应该是凯撒加密
即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文

做一番尝试

在这里插入图片描述
得到flag

3、Morse

下下来一个txt

在这里插入图片描述
根据题目是摩斯密码
1换为-
0换为.
得到

-- --- .-. ... . -.-. --- -.. . .. ... ... --- .. -. - . .-. . ... - .. -. --.

解密
在这里插入图片描述
得到flag
注意下提交时的格式

4、幂数加密

下下来的txt如下

在这里插入图片描述
题目说有8位字符
数了下有7个0
猜测是作为间隔

朴素的想法
剩下的数字加起来
表示字母

脚本

a = "8842101220480224404014224202480122"
a = a.split("0")
flag = ''
for w in a:
    sum = 0
    for i in w:
        sum += int(i)
    flag += chr(sum + 64)
print(flag)

在这里插入图片描述

得到 flag

查了查
这叫云影密码

5、Railfence

下下来txt

在这里插入图片描述
栅栏密码
直接解
发现不对
没有符合的flag

查了查
有个w变种

在这里插入图片描述
解码工具
在这里插入图片描述

得到flag

6、不仅仅是Morse

下下来txt

--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-

肯定跟摩斯密码有关
先解码看看
解码工具

在这里插入图片描述
看到一个小提示
和一堆ab

瞅着跟二进制有关
要么培根密码
要么进制转换

先试试培根密码
在这里插入图片描述
得到flag

7、混合编码

下下来txt

在这里插入图片描述

JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==

瞅着是base64

在这里插入图片描述

得到

LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw

再次base64

在这里插入图片描述

/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100

都大于等于97小于等于119
ascii码

import re
r="/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100"
r=re.split("/",r)
flag=""
for i in range(1,len(r)):
   flag=flag+chr(int(r[i]))
print flag

得到

welcometoattackanddefenceworld

8、easy_RSA

下下来txt

在这里插入图片描述
找个工具直接算
注意下进制问题
在这里插入图片描述
得到flag

9、easychallenge

下下来一个pyc文件
用uncompyle6反编译

得到

# uncompyle6 version 3.5.0
# Python bytecode 2.7 (62211)
# Decompiled from: Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: ans.py
# Compiled at: 2018-08-09 11:29:44
import base64

def encode1(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x + 25
        s += chr(x)

    return s

def encode2(ans):
    s = ''
    for i in ans:
        x = ord(i) + 36
        x = x ^ 36
        s += chr(x)

    return s

def encode3(ans):
    return base64.b32encode(ans)

flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
    print 'correct'
else:
    print 'wrong'


反向

import base64

def decode1(ans):
    s = ''
    for i in ans:
        x = ord(i) - 25
        x = x ^ 36
        s += chr(x)

    return s


def decode2(ans):
    s = ''
    for i in ans:
        x = i^ 36
        x = x - 36
        s += chr(x)

    return s


def decode3(ans):
    return base64.b32decode(ans)


final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
flag=decode1(decode2(decode3(final)))
print(flag)

在这里插入图片描述
得到flag

10、转轮机加密

下下来txt

在这里插入图片描述
密钥是1-13的重排列
意思是按这个顺序排列行数
然后根据密文调整每一行
使得第一列是密文

过程如下

在这里插入图片描述
在这里插入图片描述
得到flagfireinthehole

脚本

import re
sss='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP <
'''
m="NFQKSEVOQOFNP"
content=re.findall(r'< (.*?) <',sss,re.S)
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]
vvv=[]
ans=""
for i in range(13):
   index=content[iv[i]-1].index(m[i])
   vvv.append(index)
for i in range(0,26):
   flag=""
   for j in range(13):
       flag+=content[iv[j]-1][(vvv[j]+i)%26]
   print(flag)

11、Normal_RSA

下下来两个文件

在这里插入图片描述
瞅着一个是密文一个是密钥
查了下

在这里插入图片描述
正规思路

  • 使用 openssl 解密 pem 中参数
  • 参数十六进制转换为十进制
  • 利用 factor 对大整数进行分解,得到 p 和 q
  • 用 rsatool 生成私钥文件: private.pem
  • 用 private.pem 解密 flag.enc

不过找到了一个很好用的工具
CTF-RSA-tool

python2 solve.py --verbose -k ./pubkey.pem --decrypt ./flag.enc

在这里插入图片描述
直接得到flag

12、easy_ECC

下下来txt

在这里插入图片描述
椭圆曲线加密
直接ecctool

在这里插入图片描述
再根据题目要求计算
x+y=13957031351290+5520194834100=19477226185390
得到flag

脚本

# encoding=utf-8 
p = 15424654874903 
a = 16546484 
b = 4548674875 
def add(A, B):     
	if A == (0, 0): 
		return B     
	if B == (0, 0): 
		return A 
    x1, y1 = A     
    x2, y2 = B 
    if A != B:        
    	λ = (y2 - y1) * pow((x2 - x1), p-2, p)     
    else:         
    	λ = (x1*x1*3 + a) * pow(2*y1, p-2, p)          
    x3 = λ * λ - x1 - x2     
    y3 = λ * (x1 - x3) - y1          
    return (x3 % p, y3 % p)
G = (6478678675,5636379357093) 
k = 546768 
C = (0, 0) 
for i in range(k):     
	C = add(C, G) 
print(C) 
print("cyberpeace{%d}"%(C[0]+C[1])) 

结语

了解了好多密码知识
以及好些好用的工具
得进一步学习
以后自己写工具

知识点

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页