2020重庆市教育局网络安全攻防比赛——密码学

RSA

题目:

(p-2)*(q-2)= 0x9360ce5eb573dcdb85af4cef9468a29323aa9d26f8cef9a2b004f3d9922c12c45f74b85c00db81fa34de4714a6a95b676618a3ea8155df7095056c079531233f3e80cc372263ccaf4d42e5b7aa637586b673e30820a2d7eba201691371e138e4b3e45ed756cc6faac6e6f4686dfb56e7fcd361ac312d0f7110e76f8fee5cff75894e8a2f4e50ffd0ef9db7f0eb685a6b3038892a96b355ea1d154b77db6e97a3facd36dd8ee14b94cb98a21f4cea1412e7c72ea4cad530995ade3f5aae3444204dfc0d6ede436427
e= 0x2e43a6e5
n= 0x9360ce5eb573dcdb85af4cef9468a29323aa9d26f8cef9a2b004f3d9922c12c45f74b85c00db81fa34de4714a6a95b676618a3ea8155df7095056c079531233f3e80cc372263ccaf4d42e5b7aa637586b673e30820a2d7eba201691371e138e4b3e45eda7d04ff5b6a850dd6c5d5dcaab3588c8acc1b56794cbef1337664afd984d491d8134e3c1d661414278836b76e0de6a4e9a16f1c3f6abe86448dd065f317515d09888955eba578c5579381f59a5355584d1b2003c93660ada247f13db12aadc74a6801803b
c= 0x49c627fa815685ad85060c0891e2cd04b5cd722cd82cc809835cb43da79b21ce547f4139da69a67e201c5f4643ff91306b92ae7d1e3cc96a01e7074c7016058bf607038061fc3a99b6ac3ae1eaf6a3fddcc70303ed56281896183a4cd98c18e5f0378bf18d6a09c685c6fefdd0c0914b4b22e183ac5c88d5674b54141ef8291855bc394296b8031c0b0b6ec26889871137b91224321bb0d2a89ae1cf84eeba9fe459d0b8dff7fb1aadbae839956dfdfef5b0a8dbdfe8fd2613228e75f45195ee24cfa58b85a57e0f

已知:(p-2)*(q-2),e,n,c,n=pq

设:(p-2)(q-2)=y,p+q=x

已知y求x。

y=pq-2p-2q+4
y=pq-2(p+q)+4
y=n-2x+4
x=(n+4-y)/2

phi=(p-1)(q-1)
phi=pq-q-p+1
phi=pq-x+1

思路有了后就可以写程序了。

from gmpy2 import *
from Crypto.Util.number import *y = 0x9360ce5eb573dcdb85af4cef9468a29323aa9d26f8cef9a2b004f3d9922c12c45f74b85c00db81fa34de4714a6a95b676618a3ea8155df7095056c079531233f3e80cc372263ccaf4d42e5b7aa637586b673e30820a2d7eba201691371e138e4b3e45ed756cc6faac6e6f4686dfb56e7fcd361ac312d0f7110e76f8fee5cff75894e8a2f4e50ffd0ef9db7f0eb685a6b3038892a96b355ea1d154b77db6e97a3facd36dd8ee14b94cb98a21f4cea1412e7c72ea4cad530995ade3f5aae3444204dfc0d6ede436427
e = 0x2e43a6e5
n = 0x9360ce5eb573dcdb85af4cef9468a29323aa9d26f8cef9a2b004f3d9922c12c45f74b85c00db81fa34de4714a6a95b676618a3ea8155df7095056c079531233f3e80cc372263ccaf4d42e5b7aa637586b673e30820a2d7eba201691371e138e4b3e45eda7d04ff5b6a850dd6c5d5dcaab3588c8acc1b56794cbef1337664afd984d491d8134e3c1d661414278836b76e0de6a4e9a16f1c3f6abe86448dd065f317515d09888955eba578c5579381f59a5355584d1b2003c93660ada247f13db12aadc74a6801803b
c = 0x49c627fa815685ad85060c0891e2cd04b5cd722cd82cc809835cb43da79b21ce547f4139da69a67e201c5f4643ff91306b92ae7d1e3cc96a01e7074c7016058bf607038061fc3a99b6ac3ae1eaf6a3fddcc70303ed56281896183a4cd98c18e5f0378bf18d6a09c685c6fefdd0c0914b4b22e183ac5c88d5674b54141ef8291855bc394296b8031c0b0b6ec26889871137b91224321bb0d2a89ae1cf84eeba9fe459d0b8dff7fb1aadbae839956dfdfef5b0a8dbdfe8fd2613228e75f45195ee24cfa58b85a57e0fx_2 = n + 4 - y
# x = x_2 / 2      # 这里数太大,python无法进行计算,需要找工具进行计算后才能继续下一步。
x = 10499790783038484569805597902684142859480193320728007213400678232071927076798651687119789844875553678691846010779762493711953914470123187073249367456081129311312900659899447998876519337555563418886210866861967752734977578142838309788531494412
# 这我直接把计算的值赋值给x。
phi = n - x + 1
d = invert(e,phi)
flag = pow(c,d,n)
flag = long_to_bytes(flag)
print(flag.decode('utf-8'))

flag is :31e7957b168706db1acb124c3589e367

bullshit

题目:

from flag import flag
def pairing(a,b):shell = max(a, b)step = min(a, b)if step == b:flag = 0else:flag = 1return shell ** 2 + step * 2 + flagdef encrypt(message):res = ''for i in range(0,len(message),2):res += str(pairing(message[i],message[i+1]))return resprint(encrypt(flag))
# 1186910804152291019933541010532411051999082499105051010395199519323297119520312715722

分析代码得知计算方式为:flag每两个字节分别计算,较大者的平方+小者的2倍+标志,结果转成十进制字符串。逆向解出flag没想到算法,选择暴力破解。

flag一般均为可见字符,一开始手动构造了[a-z,A-Z,0-9,_,{,}],遍及求解即可。a**2+2b+1的取值范围大体计算了下3-5位数之间。

构造代码如下:

result = "1186910804152291019933541010532411051999082499105051010395199519323297119520312715722"
# a=['{','}','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
a= [i for i in range(48,128)]
b=a
flag=""
def pairing(a,b):shell = max(a, b)step = min(a, b)if step == b:flag = 0else:flag = 1return shell ** 2 + step * 2 + flag
def check(n):for i in range(0, len(a), 1):for j in range(0, len(b), 1):if (str(pairing(ord(a[i]), ord(b[j]))) == n):#print("%c%c" % (a[i], b[j]))return a[i], b[j]return 0,0p=0
while p<len(result):for x in range(3,6):n=result[p:p+x]r1,r2 = check(n)if r1!=0:p+=xflag += r1+r2break;
print(flag)

crypto_1

题目:

Jxyi yi oekh tqo.Jxyi yi oekh suburhqjyed., qdt jxu vbqw yi vv97v97t5t1ss32t9q5u62s2uu1t2v2s, ikrcyj myjx vbqw qdt {}

这题直接用在线工具解码:https://quipqiup.com/

解密后得到flag:

This is work daw.This is work peleukation., and the flag is ff97f97d5d1pp32d9a5e62p2ee1d2f2p, srujit vith flag and {}

Base64

题目:

import stringtable ='PackmybxwthfivdzenlqorjugspACKMYBXWTHFIVDZENLQORJUGS'+string.digits + '+/'def encode(origin_bytes):# 将字符串转换成二进制。getdBytes = ['{:0>8}'.format(str(bin(b)).replace('0b', '')) for b in origin_bytes]resp = ''nums = len(getdBytes) // 3remain = len(getdBytes) % 3integral_part = getdBytes[0:3 * nums]while integral_part:# 获取每3个字符的二进制tmp_unit = ''.join(integral_part[0:3])tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]resp += ''.join([table[i] for i in tmp_unit])integral_part = integral_part[3:]if remain:remain_part = ''.join(getdBytes[3 * nums:]) + (3 - remain) * '0' * 8tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]resp += ''.join([table[i] for i in tmp_unit]) + (3 - remain) * '='return respif __name__ == '__main__':s = '******************************'.encode()encflag = encode(s)print('encflag is:', encflag)#encflag is: sIUXs3LUgSgUdjsHvIo5vbm2gSH3g2o3iTrXi2o3vjo3i2o0vx0=

解题:

s = "PackmybxwthfivdzenlqorjugspACKMYBXWTHFIVDZENLQORJUGS0123456789+/"s_f = 'sIUXs3LUgSgUdjsHvIo5vbm2gSH3g2o3iTrXi2o3vjo3i2o0vx0='# 将字符串转化为2进制
bin_str = []
for i in s_f:if i != '=':x = str(bin(s.index(i))).replace('0b', '')bin_str.append('{:0>6}'.format(x))outputs = ""
nums = s_f.count('=')
while bin_str:temp_list = bin_str[:4]temp_str = "".join(temp_list)if (len(temp_str) % 8 != 0):temp_str = temp_str[0:-1 * nums * 2]for i in range(0, int(len(temp_str) / 8)):outputs += chr(int(temp_str[i * 8:(i + 1) * 8], 2))bin_str = bin_str[4:]
print(outputs)

2020重庆市教育局网络安全攻防比赛——密码学相关推荐

  1. 2020重庆市教育局网络安全攻防比赛

    一个卑微的web狗在角落瑟瑟发抖,又是一题未出.密码基本都是全秒.拿了一个一血,两个2血,misc基本和后面和队友一起做的,全是一步之遥. 想起这次的misc就睡不着,起来赶了一篇wp,记录一下. 有 ...

  2. 攻防比赛_2020年度泉州市大学生网络安全攻防比赛在黎明职业大学圆满落幕

    10月16日下午,作为2020年国家网络安全宣传周泉州市系列活动之一,"泉州市大学生网络安全攻防比赛"在黎明职业大学智慧教学中心成功举办并圆满落幕.此次比赛由泉州市互联网信息办公室 ...

  3. 移动网络安全_新突破!青海移动在2020年中国移动网络安全运维技能竞赛大赛中荣获三等奖!...

     青海移动在2020年中国移动网络安全运维技能竞赛中荣获团体三等奖,这也是在历年网络安全竞赛活动中首次获得集团奖项. 为积极应对日益复杂严峻的网络安全形势,促进网络安全运维人员技能提升,更好适应5G. ...

  4. 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!...

    对于想学习或者参加CTF比赛的朋友来说,CTF工具.练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助. CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站,内容 ...

  5. 喜讯 雨笋教育优秀学员荣获望城区网络安全攻防演练二等奖

    雨笋君近日收到一份来自望城区网信办对雨笋优秀学员工作肯定的表扬信. 为切实做好2022年全国"两会"期间长沙市望城区网络安全保障工作,检验提升全区关键信息基础设施网络安全防护和应急 ...

  6. 网络安全攻防演练项目介绍

    有很多朋友问我写的攻防演练是什么? 本文给予回答 网络安全攻防演练是公安部组织的面向税务.电力.电信.银行.铁路.财政.广电.水利.教育.互联网.检察院.法院.石油.交通等行业的政府单位/公司,开展的 ...

  7. 2020“黄鹤杯”网络安全人才与创新峰会圆满成功

    2020"黄鹤杯"网络安全人才与创新峰会在武汉国家网络安全人才与创新基地展示中心完美落幕了,其主题"网络安全为人民,网络安全靠人民"也通过此次大会深入人心. 9 ...

  8. 永信至诚助首届民航网络安全攻防技能竞赛决赛圆满收官

    10月26日,由中国民用航空局人事科教司指导,中国民航大学主办,北京永信至诚科技股份有限公司提供技术支撑的"首届民航网络安全攻防技能竞赛"总决赛于天津圆满收官.经过CTF答题与攻防 ...

  9. 安全无界·成长无限—2023年网络安全“攻防”技能大赛报名启动

    ​2023年网络安全"攻防"技能大赛报名启动 为全面贯彻落实国家网络安全强国战略,助推我国网络安全产业链发展,引导校企培养网络安全实战型人才,精准解决企业招聘和相关专业人员就业难题 ...

最新文章

  1. C#操作Excel导入导出
  2. Bundle Adjustment原理及应用(附实战代码)
  3. matepad什么时候升级鸿蒙,华为MatePad Pro迎来EMUI 11正式版升级 后续可直接升级鸿蒙系统...
  4. sql语句添加删除外键
  5. 【报表技术】IReport图形化报表开发工具生成PDF文档
  6. 关于手机的,发送验证码,正则
  7. 灵活使用DataView
  8. Apache Hudi 是Uber 大数据存储系统
  9. java new 数据类型_Java之基本数据类型
  10. JVM内存模型1.8
  11. 【笔记】《Java核心技术卷1(第11版)》-第1章-Java程序设计概述
  12. 8086汇编基础 inc 自加一
  13. 手把手带你玩转Spark机器学习-Spark的安装及使用
  14. 掌握Android图像显示原理(中)
  15. 宜远公众号H5网页AI测肤报告分享
  16. c++ IP地址离线查询
  17. java图片识别(文字、字母、数字)
  18. 不小心清空了回收站怎么恢复,回收站删除的东西可以恢复吗
  19. 创建销毁对象(第八条:杜绝使用FINALIZERS和CLEANERS)
  20. 基础IO(上)——Linux

热门文章

  1. nginx配置Router
  2. Opencv 原图像素坐标点透视变换后对应坐标点
  3. 干货分享 | 分子对接与分子动力学模拟在药物研发中的应用
  4. 亲自传授我的各种经典的篮球技术动作gif图
  5. 应用层的HTTP和HTTPS协议
  6. 判断字符串是否为回文串
  7. 测试面试:设计测试用例
  8. MATLAB调用python文件以及调用.exe文件方法
  9. 双向数据绑定原理(三种实现方式)
  10. 安装bcftools