攻防世界-CRYPTO-新手区

为了11月的比赛,菜鸡又开始速成密码学了…

1.base64

题目

Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9

这题唯一的价值应该是让我熟悉下python内置的base64编码解码

import base64
s = "Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9"
a = base64.b64decode(s)
print(a)
#cyberpeace{Welcome_to_new_World!}

2.Caesar

题目

oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}

凯撒密码加密,key=12。
凯撒解密在线


3.Morse

题目

11 111 010 000 0 1010 111 100 0 00 000 000 111 00 10 1 0 010 0 000 1 00 10 110

morse密码,数字1对应"-",数字0对应"."

– — .-. … . -.-. — -… . … … … — … -. - . .-. . … - … -. --.
解密得 morsecodeissointeresting

Morse解密在线


4.幂数加密

题目

88421/0122/048/02244/04/0142242/0248/0122

普通的幂数加密不太一样,这个用/划分,每两个//之间数字的和对应字母在字母表中的位置。[A-1,Z-26]

88421/0122/048/02244/04/0142242/0248/0122
23/5/12/12/4/15/14/5
WELLDONE


5.Railfence

题目

ccehgyaefnpeoobe{lcirg}epriec_ora_g

这题又是普通栏栅解密的变种,W型栏栅解密,就是把明文以W行排列,依次从左到右、从上到下,最后从第一行开始,逐行拼在一起形成密文。

cyberpeace{railfence_cipher_gogogo}
在线解密


6.不仅仅是Morse

题目

– .- -.-- …–.- -… . …–.- … .- …- . …–.- .- -. — - … . .-. …–.- -… . -.-. — -… . … … … … .- .- .- .- .- -… .- .- -… -… -… .- .- -… -… .- .- .- .- .- .- .- .- -… .- .- -… .- -… .- .- .- .- .- .- .- -… -… .- -… .- .- .- -… -… .- .- .- -… -… .- .- -… .- .- .- .- -… .- -… .- .- -… .- .- .- -… -… .- -… .- .- .- -… .- .- .- -… .- .- -… .- -… -… .- .- -… -… -… .- -… .- .- .- -… .- -… .- -… -… .- .- .- -… -… .- -… .- .- .- -… .- .- -… .- .- -… .- .- .- .- -… -… .- -… -… .- .- -… -… .- .- -… .- .- -… .- .- .- -… .- .- -… .- .- -… .- .- -… .- -… .- .- -… -… .- -… .- .- .- .- -… -… .- -… .- .- -… -… .-
给了一串morse电码 解密之后得到
may_be_have_another_decodehhhhaaaaabaabbbaabbaaaaaaaabaababaaaaaaabbabaaabbaaabbaabaaaababaabaaabbabaaabaaabaababbaabbbabaaabababbaaabbabaaabaabaabaaaabbabbaabbaabaabaaabaabaabaababaabbabaaaabbabaabba
后面的ab一看就知道是培根密码,用培根密码解密得到attackanddefenceworldisinteresting

培根解密在线


7.混合编码

题目

JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==

给了一串base64编码,也就是多绕几次就能解出来。

base64解码
LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw

Unicode编码-->ASCII 
LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw

ASCII-->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'
a = [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]
s = []
for i in a:
    s.append(chr(i))

print("".join(s))
#welcometoattackanddefenceworld

8.easy_RSA

题目

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d

了解RSA原理即可

#Euler(n) = (p-1)(q-1) = 2135733082216268400
#ed 同余1 mod(p-1)(q-1)
a= inverse_mod(17,2135733082216268400)
print(a)
#125631357777427553

9.easychallenge

这题稍微有点麻烦,给了一个pyc文件,需要先反编译成py文件然后再逆一下函数逻辑。
用kali自带的uncompyle来进行反编译。

root@devil:~/AD-World/CRYPTO/easychallenge# uncompyle6 ec.pyc
# uncompyle6 version 3.5.1
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.17 (default, Oct 19 2019, 23:36:22) 
# [GCC 9.2.1 20191008]
# 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'
# okay decompiling ec.pyc

然后根据加密代码写出解密脚本即可

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 = ord(i) ^ 36
		x = x - 36
		s += chr(x)
	return s


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

final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
print (decode1(decode2(decode3(final))))
#cyberpeace{interestinghhhhh}

10.转轮机加密

题目

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 <
密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP

转轮机加密方式:

密钥所代表的数字是将要操作的行数,密文对应的字母’X’表示从字母’X’开始。

比如<2,N>就表示从第2行,字母N开始

原来的是:	KPBELNACZDTRXMJQOYHGVSFUWI
重新排序后:	NACZDTRXMJQOYHGVSFUWIKPBEL

按照第2,3,7,5,13行…的顺序依次进行排序,得到如下:

2:	NACZDTRXMJQOYHGVSFUWIKPBEL
3:	FHTEQGYXPLOCKBDMAIZVRNSJUW 
7:	QGWTHSPYBXIZULVKMRAFDCEONJ
5:	KCPMNZQWXYIHFRLABEUOTSGJVD
13:	SXCDERFVBGTYHNUMKILOPJZQAW
12:	EIURYTASBKJDFHGLVNCMXZPQOW
9:	VUBMCQWAOIKZGJXPLTDSRFHENY
1:	OSFEZWAXJGDLUBVIQHKYPNTCRM
8:	QNOZUTWDCVRJLXKISEFAPMYGHB
10:	OWTGVRSCZQKELMXYIHPUDNAJFB
4:	FCUKTEBSXQYIZMJWAORPLNDVHG
11:	NBVCXZQWERTPOIUYALSKDJFHGM
6:	PNYCJBFZDRUSLOQXVETAMKGHIW

按列来找,在倒数第九列找到了一串字符,感觉应该是flag了。
FIREINTHEHOLE–>fireinthehole


11.Normal_RSA

给了一个flag.enc和pubkey.pem
本题需要用到的工具:openssl(kali自带)

在线公钥解析

-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMJjauXD2OQ/+5erCQKPGqxsC/bNPXDr
yigb/+l/vjDdAgMBAAE=
-----END PUBLIC KEY-----

公钥解析得到

e:65537

n:87924348264132406875276140514499937145050893665602592992418171647042491658461

p: 275127860351348928173285174381581152299

q:319576316814478949870590164193048041239

在线分解n

通过脚本计算私钥

#coding=utf-8
import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=275127860351348928173285174381581152299
arsa.q=319576316814478949870590164193048041239
arsa.e=65537
arsa.n=arsa.p*arsa.q
Fn=long((arsa.p-1)*(arsa.q-1))
i=1
while(True):
    x=(Fn*i)+1
    if(x%arsa.e==0):
           arsa.d=x/arsa.e
           break
    i=i+1
private=open('private.pem','w')
private.write(arsa.exportKey())
private.close()

再用私钥解密公钥

OpenSSL> rsautl -decrypt -in flag.enc -inkey private.pem
PCTF{256b_i5_m3dium}

12.easy_ECC

已知椭圆曲线加密Ep(a,b)参数为

p = 15424654874903

a = 16546484

b = 4548674875

G(6478678675,5636379357093)

私钥为

k = 546768

求公钥K(x,y)

先用ECCTOOL跑了一遍

在这里插入图片描述

x=13957031351290,y=5520194834100

x+y = 19477226185390

算法实现

#先实现椭圆曲线上的加法运算

# 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)

由于 M 是素数,所以由费马小定理可知 (x2−x1)M−1 ≡ \equiv 1(modM),
所以 x2−x1 的乘法逆元是 (x2−x1)M−2,同理,y2−y1 的乘法逆元是 (y2−y1)M−2.
接下来进行乘法运算(加密)

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]))
# cyberpeace{19477226185390}

参考链接1

参考链接2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值