2020——网鼎杯部分writeup

本文详细解析了CTF竞赛中遇到的三种典型密码学难题:离散对数问题、线性方程组求解及RSA加密破解。通过Python和Sage等工具,演示了如何利用数学原理和编程技巧成功解密密文,获取关键信息。

1.you raise me up

题目源码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Util.number import *
import random

n = 2 ** 512
m = random.randint(2, n-1) | 1
c = pow(m, bytes_to_long(flag), n)
print 'm = ' + str(m)
print 'c = ' + str(c)

# m = 391190709124527428959489662565274039318305952172936859403855079581402770986890308469084735451207885386318986881041563704825943945069343345307381099559075
# c = 6665851394203214245856789450723658632520816791621796775909766895233000234023642878786025644953797995373211308485605397024123180085924117610802485972584499

这是一个求解离散对数的问题——经过查询在sage下有discrete_log函数可以直接解决问题

e=discrete_log(Mod(c,n),Mod(m,n))

2.boom

题目给出一个exe,我们运行exe解出每一道题即可有结果

第一关

 去md5查询得到en5oy

第二关

使用sympy解方程

from sympy import *
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
print solve([3*x-y+z-185,2*x+3*y-z-321,x+y+z-173],[x, y,z])

 第三关

同上解方程

from sympy import *
x = Symbol('x')
print solve([x*x+x-7943722218936282],[x])

 3.easy_ya

首先爆破获得之后的数据

from pwn import *
import gmpy2
def md5(a):
 for i in xrange(128):
  for j in xrange(128):
   for k in xrange(128):
    for o in xrange(128):
     jie=chr(i)+chr(j)+c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值