• base64 下载附件后去解密base64即可 cyberpeace{Welcome_to_new_World!} Caesar 下载附件后去解密，是凯撒密码 位移12即可 Morse 这是一串摩斯密码，拿去解密即可 ...r="/119/101/10
base64
下载附件后去解密base64即可
cyberpeace{Welcome_to_new_World!}
Caesar
下载附件后去解密，是凯撒密码

位移12即可

Morse

这是一串摩斯密码，拿去解密即可
cyberpeace{morsecodeissointeresting}
混合编码
首先base64解密

然后进行unicode编码转换

接着再进行一次base64解密

最后在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

加上格式Cyberpeace{welcometoattackanddefenceworld}
幂数加密
运行脚本进行解密即可
a=["88421","0122","048","02244","04","0142242","0248","0122"]
flag="" for j in range(0,len(a)):
str = a[j]
list=[]
sum=0
for i in str:
list.append(i)
length = len(list)
for i in range(0,length):
sum+=int(list[i])
flag+=chr(64+sum) print flag

cyberpeace{WELLDONE}
Railfence
这是栅栏密码，栏数为5

cyberpeace{railfence_cipher_gogogo}
easy_RSA
运行python即可
def Exgcd(a, b):
# ax+by=1,gcd(a,b)
if b == 0:
return (1, 0, a)
(x, y, r) = Exgcd(b, a%b)
temp = x
x = y
y = temp-a/b*y
return (x, y, r)
def inv(a, n):
# ax = 1 mod n
(x, y, r) =Exgcd(a, n)
if x<0:
return x+n
else:
return x
p = 473398607161
q = 4511491
e = 17
N = p*q
phi_N = (p-1) * (q-1)
d = inv(e, phi_N)
print(d)

不仅仅是Morse
首先摩斯密码解密然后把HHH后面的拿去培根解密即可

然后就是把小写的字符串就是flag了

cyberpeace{attackanddefenceworldisinteresting}
Easychallenge
需要先把python的pyc文件进行反编译
之后运行代码即可
import base64
s="UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==="
s=base64.b32decode(s)
m = ''
for i in s:
x = ord(i) ^ 36
x = x - 36
m+= chr(x)
h = ''
for i in m:
x = ord(i) - 25
x = x ^ 36
h+= chr(x)
print h

Normal_RSA
PCTF{256b_i5_m3dium}
转轮机加密
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'
# 将sss转化为列表形式
content=re.findall(r'< (.*?) <',sss,re.S)
# re.S:DOTALL，此模式下，"."的匹配不受限制，可匹配任何字符，包括换行符
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]
print(content)
vvv=[]
for i in range(13):
index=content[iv[i]-1].index(m[i])
vvv.append(index)
print(vvv)

for i in range(0,26):
flag=""
for j in range(13):
flag += content[iv[j]-1][(vvv[j]+i)%26]
print(flag.lower())
Fire开头的就是了，直接提交即可

easy_ECC
运行代码，然后把公匙的十六进制转换成十进制再相加即可
import collections
import random

EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')

curve = EllipticCurve(
'secp256k1',
# Field characteristic.
p=int(input('p=')),
# Curve coefficients.
a=int(input('a=')),
b=int(input('b=')),
# Base point.
g=(int(input('Gx=')),
int(input('Gy='))),
# Subgroup order.
n=int(input('k=')),
# Subgroup cofactor.
h=1,
)

# Modular arithmetic ##########################################################

def inverse_mod(k, p):
"""Returns the inverse of k modulo p.

This function returns the only integer x such that (x * k) % p == 1.

k must be non-zero and p must be a prime.
"""
if k == 0:
raise ZeroDivisionError('division by zero')

if k < 0:
# k ** -1 = p - (-k) ** -1 (mod p)
return p - inverse_mod(-k, p)

# Extended Euclidean algorithm.
s, old_s = 0, 1
t, old_t = 1, 0
r, old_r = p, k

while r != 0:
quotient = old_r // r
old_r, r = r, old_r - quotient * r
old_s, s = s, old_s - quotient * s
old_t, t = t, old_t - quotient * t

gcd, x, y = old_r, old_s, old_t

assert gcd == 1
assert (k * x) % p == 1

return x % p

# Functions that work on curve points #########################################

def is_on_curve(point):
"""Returns True if the given point lies on the elliptic curve."""
if point is None:
# None represents the point at infinity.
return True

x, y = point

return (y * y - x * x * x - curve.a * x - curve.b) % curve.p == 0

def point_neg(point):
"""Returns -point."""
assert is_on_curve(point)

if point is None:
# -0 = 0
return None

x, y = point
result = (x, -y % curve.p)

assert is_on_curve(result)

return result

"""Returns the result of point1 + point2 according to the group law."""
assert is_on_curve(point1)
assert is_on_curve(point2)

if point1 is None:
# 0 + point2 = point2
return point2
if point2 is None:
# point1 + 0 = point1
return point1

x1, y1 = point1
x2, y2 = point2

if x1 == x2 and y1 != y2:
# point1 + (-point1) = 0
return None

if x1 == x2:
# This is the case point1 == point2.
m = (3 * x1 * x1 + curve.a) * inverse_mod(2 * y1, curve.p)
else:
# This is the case point1 != point2.
m = (y1 - y2) * inverse_mod(x1 - x2, curve.p)

x3 = m * m - x1 - x2
y3 = y1 + m * (x3 - x1)
result = (x3 % curve.p,
-y3 % curve.p)

assert is_on_curve(result)

return result

def scalar_mult(k, point):
"""Returns k * point computed using the double and point_add algorithm."""
assert is_on_curve(point)

if k < 0:
# k * point = -k * (-point)
return scalar_mult(-k, point_neg(point))

result = None

while k:
if k & 1:

# Double.

k >>= 1

assert is_on_curve(result)

return result

# Keypair generation and ECDHE ################################################

def make_keypair():
"""Generates a random private-public key pair."""
private_key = curve.n
public_key = scalar_mult(private_key, curve.g)

return private_key, public_key

private_key, public_key = make_keypair()
print("private key:", hex(private_key))
print("public key: (0x{:x}, 0x{:x})".format(*public_key))

攻略到这里结束了~~~~~~
展开全文
• ## 攻防世界crypto篇

千次阅读 2020-02-28 16:27:06
1.告诉你个秘密 题目给了这样一串字符： 乍一看看不出什么，那就边猜边试吧。 既有数字又有字母，且字符个数是2的倍数，可能是十六进制吧。 那就将其转换成十进制，再根据asc码转化成字符。 cjV5RyBscDlJIEJqTSB0...
1.告诉你个秘密
题目给了这样一串字符：  乍一看看不出什么，那就边猜边试吧。 既有数字又有字母，且字符个数是2的倍数，可能是十六进制吧。 那就将其转换成十进制，再根据asc码转化成字符。
cjV5RyBscDlJIEJqTSB0RmhC VDZ1aCB5N2lKIFFzWiBiaE0g 还是看不出来flag是什么样子的。 难道方法不对吗？ 再试一次吧，再用base64解码，出现了这样的结果
r5yG lp9I BjM tFhB T6uh y7iJ QsZ bhM 还是不对，没想法了。 后来查了百度之后说是键盘围绕加密（我的脑洞还是不够大啊） 最后得到flag为TONGYUAN
2.cr3-what-is-this-encryption
看到有q,p,e,c就可以知道是RSA加密 因为φ(N) = (P-1)(Q-1) E * D % φ(N) = 1（D是私钥，E是公钥） M ＝C^ D mod N(M是明文） 先将p,q,e转化为十进制，再根据公式计算出D,N，M。 再将M转化成字符 最后得到flag为ALEXCTF{RS4_I5_E55ENT1AL_T0_D0_BY_H4ND}
3.flag_in_your_hand1
打开附件，看到
打开网页，出现  按F12  看了java的源码，知道要让ic返回值为true.  而token里要填的是a数列里的每位数减3，转换 asc码得到的字符，输入后得到flag 
展开全文
• 继续ctf的旅程，攻防世界Crypto高手进阶区的5分题，本篇是SM的writeup
前言
继续ctf的旅程 攻防世界Crypto高手进阶区的5分题 本篇是SM的writeup
发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了
解题过程
得到三个文件和一段python
from Crypto.Util.number import getPrime,long_to_bytes,bytes_to_long
from Crypto.Cipher import AES
import hashlib
from random import randint
def gen512num():
order=[]
while len(order)!=512:
tmp=randint(1,512)
if tmp not in order:
order.append(tmp)
ps=[]
for i in range(512):
p=getPrime(512-order[i]+10)
pre=bin(p)[2:][0:(512-order[i])]+"1"
ps.append(int(pre+"0"*(512-len(pre)),2))
return ps

def run():
choose=getPrime(512)
ps=gen512num()
print "gen over"
bchoose=bin(choose)[2:]
r=0
bchoose = "0"*(512-len(bchoose))+bchoose
for i in range(512):
if bchoose[i]=='1':
r=r^ps[i]

key=long_to_bytes(int(hashlib.md5(long_to_bytes(choose)).hexdigest(),16))
aes_obj = AES.new(key, AES.MODE_ECB)
ef=aes_obj.encrypt(flag).encode("base64")

open("r", "w").write(str(r))
open("ef","w").write(ef)
gg=""
for p in ps:
gg+=str(p)+"\n"
open("ps","w").write(gg)

run()

生成ps根据bchoose和ps生成r用choose生成key对flag做AES加密得到ef
所以解题思路是
根据ps和r得到bchoose通过bchoose得到choose然后解flag
from base64 import b64decode
from hashlib import md5
from Crypto.Cipher import AES
from Crypto.Util.number import long_to_bytes

def cal_k():
with open('ps','r') as f:
with open('r','r') as f:
pbits=[bin(x).rfind('1')-2 for x in ps]
bc=['0']*512
for le in range(512):
ind=pbits.index(511-le)
tt=bin(r)[2:].rjust(512,'0')[511-le]
if tt=='1':
bc[ind]='1'
r^=ps[ind]
return long(''.join(bc),2)

def solve():
with open('ef','rb') as f:
key=long_to_bytes(int(md5(long_to_bytes(cal_k())).hexdigest(),16))
aes_obj = AES.new(key, AES.MODE_ECB)
return aes_obj.decrypt(ef)

if __name__=='__main__':
print solve()

得到flag：flag{shemir_alotof_in_wctf_fun!}
结语
好奇的是题目名是什么意思
展开全文
• ## 攻防世界crypto

千次阅读 2021-10-24 15:10:52
1.base 64

直接basse64解码得到flag
2.凯撒密码
使用工具直接解密，但是凯撒密码是0到25中的一个整数，需要进行尝试

4.云隐密码
特点：只有01248
其中0作为分隔，将数字相加，匹配26个字母

5.Ascll
Unicode特点：&#76；

md5碰撞
弱比较与强比较
弱比较==
强比较===
使用数组强比较


展开全文
• 无题base64CaesarMorse混合编码Railfence base64 下得附件，扔进base64加密解密里面 就得到flag Caesar ...拿到附件，把文字贴到解密区（不知道位移是多少？一个一个试）最后得知位移为12位 ...一看题目就知道是摩斯电码...
• 攻防世界crypto高手题之你猜猜 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的你猜猜 下载附件，是一个.txt文件，打开，数字和字母： 504B03040A0001080000626D0A49F4B5091F1E...
• 攻防世界—新手区—CRYPTO base64 下载下附件之后打开 在网页中打开base64在线解密 将附件文档里面的一串字符放进在线解码工具中得到flag 得到flag cyberpeace{Welcome_to_new_World!}。 Caesar 下载好附件打开...
• crypto主要是针对密码学的题，要想把crypto做好，就必须要对各种密码学进行研究。 1.base64 第一关较为简单，直接使用base64进行解密即可。 cyberpeace{Welcome_to_new_World!} 2.Caesar 第二关用到了凯撒码， 直接...
• 攻防世界 crypto入门WP 前言 下学期要求密码和Re，现在这俩几乎是空白，趁着暑假的功夫，最近也能闲下来，就学一学crypto，其实真正接触发现挺有意思的，各种密码的加密千奇百怪，层出不穷，也是需要慢慢积累经验，...
• 继续ctf的旅程，攻防世界Crypto高手进阶区的7分题，本篇是SM1的writeup
• 攻防世界crypto easy_ECC 刚开始看见6分就知道不简单 看见文本之后联想到了py脚本（但可惜卑微的我不会）所以就照搬了大佬的脚本 import collections import random EllipticCurve = collections.namedtuple('...
• 本篇是攻防世界 Crypto 新手练习区的全解
• 继续ctf的旅程，攻防世界Crypto高手进阶区的5分题，本篇是说我作弊需要证据的writeup
• 继续ctf的旅程，攻防世界Crypto高手进阶区的5分题，本篇是Easy_Crypto的writeup
• 攻防世界 crypto 入门题之easy_ECC ...这题是攻防世界crypto 入门题之easy_ECC 下载附件，打开： 椭圆曲线ECC加密，没接触过，不懂原理，主要是找不到集成脚本，算了，浏览中发现一篇讲得透彻的博客： ...
• 1、base64 看一下题目就知道这是一个base64加密，我们可以直接在网上...a = open('D:\\crypto1.txt','r') s = a.read() print(base64.b64decode(s)) flagcyberpeace{Welcome_to_new_World!} 2、Caesar 这一题也可以...
• ## 攻防世界crypto Caesar

千次阅读 2019-10-26 19:47:39
Caesar 题目 附件 oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz} ...其实很简单，就是字母的偏移。 过程 凯撒密码，因为知道flag格式为cyberpeace{}，所以o要对应c，所以计算差值为15，尝试解密和加密，发现偏移15...
• 攻防世界crypto高手题之Decrypt-the-Message 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的Decrypt-the-Message 下载附件，是个.txt文件，内容是诗歌，下面是一行四不像的英文，后来发现是加密后的...
• 继续ctf的旅程，攻防世界Crypto高手进阶区的5分题，本篇是RSA_gcd的writeup
• 继续ctf的旅程，攻防世界Crypto高手进阶区的2分题，本篇是flag_in_your_hand1的writeup
• 继续ctf的旅程，攻防世界Crypto高手进阶区的4分题，本篇是enc的writeup
• 继续ctf的旅程，攻防世界Crypto高手进阶区的3分题，本篇是Decrypt-the-Message的writeup
• 这题是攻防世界crypto 入门题之easy_RSA RSA的密码学听说了好久，主要是战队的队友之前有研究，而我却是一点都不了解，这次遇到了，就研究一下做题方法和技巧，密码学目前是不打算深究了，毕竟数学也不太好，所以我...
• 成功解析出两个文件的公钥： 不难发现，两个文件的模数相同，想到同模攻击，通过脚本求得题解： from Crypto.PublicKey import RSA import libnum import gmpy2 c1=libnum.s2n(open('cipher1.txt','rb').read()) c2...
• 1. Railfence 2.不仅仅是Morse
• 这题是攻防世界crypto 高手进阶区之告诉你个秘密 下载附件，是个.txt文件，打开： (这里积累第一个经验) 虽然没有f，但是看起来就是16进制的基本组成单位0~F，既然是十六进制就不用先十六进制转字符串，目前接触的...
• 继续ctf的旅程，攻防世界Crypto高手进阶区的3分题，本篇是你猜猜的writeup
• 这题是攻防世界crypto 入门题之转轮机加密 下载附件： 好了，记住了，以后这个内容格式的就是转轮机加密了： 原理就是转齿轮把一个字母换成另一个，直接上一个修改后的大佬脚本： rotor = [ #这里是要输入的转...

...