当前位置: 首页 > ai >正文

buuctf-鸡藕椒盐味,[NPUCTF2020]EzRSA,[WUSTCTF2020]大数计算

1.鸡藕椒盐味

题目“鸡藕椒盐味”不就是谐音“奇偶校验位”,本题给了验证码110010100000共12位,但是是个错误的验证码,这时我们需要了解海明码校验----

(不了解的可以去看看海明码原理与应用详解-CSDN博客,讲的很好)

题目给了一个提示:每个汉堡8块,也就是说, 数据位为8,校验位为4,而这四位校验码位置一定是在2^n上,即1,2,4,8。题目是说验证码倒了,我们再倒回去是0000 0101 0011,我们想要更清晰的分析就去列个表格


第一个检验位r1,它检验的位置为1,3,5,7,9,11(读一位隔一位)

第二个检验位r2,它检验的位置为2,3,6,7,10,11(读二位隔二位)

第三个检验位r4,它检验的位置为4,5,6,7,12(读四位隔四位)

第四个检验位r8,它检验的位置为8,9,10,11,12(读八位隔八位)

之后对校验位对应的数据进行异或运算(偶校验)

r1=0⊕1⊕1⊕0⊕1=1

r2=0⊕0⊕1⊕0⊕1=0

r3=1⊕0⊕1⊕1=1

r4=0⊕0⊕1⊕1=0

全0才表示无错,但是r1=1,发现了出错,当发生错误时,将r1r2r3r4的值转化为十进制即可知道发生错误的位置,1010即9,第九位出了问题。把0改成1后即0000 0101 1011,最后倒过来110110100000

最后一步就是求md5了,脚本如下

import hashlib
def calculate_md5(input_string):# 创建 MD5 哈希对象md5_hash = hashlib.md5()# 更新哈希对象(需要将字符串编码为字节)md5_hash.update(input_string.encode('utf-8'))# 获取十六进制哈希值return md5_hash.hexdigest()
if __name__ == "__main__":user_input = input("请输入要计算 MD5 的字符串: ")result = calculate_md5(user_input)print(f"MD5 哈希值: {result}")
#d14084c7ceca6359eaac6df3c234dd3b

flag{d14084c7ceca6359eaac6df3c234dd3b}

2.[NPUCTF2020]EzRSA

本题给了e很奇怪,54722,先不管我们先去分解n试试,我尝试了yafu工具和factordbd网站分解,后者成功了,得出p和q,直接求phi=(p-1)*(q-1)

那么该有的数据都有了,剩下求个私钥之后不直接可以求m了吗

不不不,我们要验证gcd(e,phi)是否等于1,不然求不出逆元啊

import gmpy2
p=106021448991021391444550749375115277080844281746248845802565680557785009341952320484175568763707424932172033597514861602114171459176440279045761846695231788376075050452154924141266290931413542110639081792550648106240966552406813059396358355737185354885474455248579946190266152416149137616855791805617206153497
e = 54722
q=161136651053130509602530659420755324119806487925813087617466818245407407797561810253722204813002837916779909309520498985459703212021249251124954613236122142746302911323565396331355397916764254680629384957057354297855676493062493901977415968666512459829211010720514167083018352796496733697235524845188512914793
phi =(p-1)*(q-1)
x = gmpy2.gcd(phi,e)
print(x)
#x=2

居然不等于1,那就不可以直接带入了,这种情况就属于e,phi不互素了

原理和解题脚本大家去参考(RSA-e和phi不互素-CSDN博客)

脚本直接把p,q,e,c换一下即可.

我直接使用轩禹RSA工具一把梭了

flag{diff1cult_rsa_1s_e@sy}

3.[WUSTCTF2020]大数计算

这个题目纯就是靠写计算代码了

flag等于 wctf2020{Part1-Part2-Part3-Part4} 每一Part都为数的十六进制形式(不需要0x),并用 '-' 连接
Part1 = 2020*2019*2018* ... *3*2*1 的前8位
Part2 = 520^1314 + 2333^666 的前8位
Part3 = 宇宙终极问题的答案 x,y,z绝对值和的前8位
Part4 = 见图片附件,计算结果乘上1314

对part1有;

import math# 初始化结果为1(因为阶乘从1开始乘)
result = 1
for i in range(1, 2021):result *= i# 当数字太大时,只保留前15位数字if result > 10 ** 15:result = int(str(result)[:15])first_8_digits = str(result)[:8]
print("2020!的前8位数字是:", first_8_digits)
#38609695

对part2有:

part2 = 520**1314 + 2333**666
print("part2 =",str(part2)[:8])
# part2 = 67358675

对part3有:

参考Hackergame 2019——宇宙终极问题 42-CSDN博客

x = 80538738812075974
y = 80435758145817515
z = 12602123297335631
part3 = x + y + z
print("part3 =",str(part3)[:8])
# part3 = 17357662

对part4有;

直接算了(2*22+36)*1314 = 683280

最后求flag

#转十六进制不要前面的0x
part1 = hex(38609695)[2:]
part2 = hex(67358675)[2:]
part3 = hex(17357662)[2:]
part4 = hex(683280)[2:]
print("wctf2020{"+part1+"-"+part2+"-"+part3+"-"+part4+"}")
# wctf2020{24d231f-403cfd3-108db5e-a6d10}

flag{24d231f-403cfd3-108db5e-a6d10}

http://www.xdnf.cn/news/20310.html

相关文章:

  • Skia如何渲染 Lottie 动画
  • 《Java线程池面试全解析:从原理到实践的高频问题汇总》
  • 深入剖析Spring Boot启动流程
  • 基于Node.js和Three.js的3D模型网页预览器
  • JP4-7-MyLesson后台前端(二)
  • 轻量应用服务器具体指的是什么?
  • Redis《RedisSerializer》
  • 脑电数据预处理十五:小波变换从原理到实践
  • Codeforces Round 1046 (Div. 2) vp补题
  • C++ 详细讲解vector类
  • 检查CDB/PDB 表空间的说明
  • Linux网络接口命名详解:从eth0到ens33
  • [光学原理与应用-431]:非线性光学 - 能生成或改变激光波长的物质或元件有哪些?
  • GPIO的配置中开漏输出与推挽输出的差别
  • C++零基础第四天:顺序、选择与循环结构详解
  • Protobuf
  • 人工智能辅助荧光浓度检测系统:基于YOLO与RGB分析的Python实现
  • 【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
  • AP1272:新一代高性能LDO稳压器,为精密电子系统提供更优电源解决方案
  • 《秦时明月》系列经典语录分享
  • 云原生的12个要素是什么?
  • 【Linux指南】动静态库与链接机制:从原理到实践
  • 疯狂星期四文案网第62天运营日记
  • 消失的6个月!
  • 从文本到知识:使用LLM图转换器构建知识图谱的详细指南
  • Java多线程学习笔记
  • Nginx 实战系列(二)—— Nginx 配置文件与虚拟主机搭建
  • QML Charts组件之LineSeries、SplineSeries与ScatterSeries
  • 正态分布 - 正态分布的经验法则(68-95-99.7 法则)
  • Modbus通信的大端和小端字节序