[NPUCTF2020]认清形势,建立信心

题目

from Crypto.Util.number import *
from gmpy2 import *
from secret import flag p = getPrime(25)
e = # Hidden
q = getPrime(25)
n = p * q
m = bytes_to_long(flag.strip(b"npuctf{").strip(b"}")) c = pow(m, e, n)
print(c)
print(pow(2, e, n))
print(pow(4, e, n))
print(pow(8, e, n)) '''
169169912654178
128509160179202
518818742414340
358553002064450
'''

题解

首先我们看看题目给的条件,没给e,但是给了c,c1,c2,c3,其中:

\(c=m^e\,mod\,n\)

\(c1=2^e\,mod\,n\)

\(c2=4^e\,mod\,n\)

\(c3=8^e\,mod\,n\)

此时,根据定义得到:\(c_{1}^2=c_{2}+k_{1}n\) ------式1

进而得到:\(k_{1}n=c_{1}^2-c_{2}\)

同理:\(c_{1}c_{2}=c_{3}+k_{2}n\) ------式2

联立方程,求最大公因数:n = \(gcd( c_{1} ^ 2 - c_{2} , c_{1} * c_{2} -c_{3})\)

1054494004042394

由此得到n。

分解n:

由此可以得到p,q,最后就可以常规做题。

关于e,此处需要用离散对数求解:

求解 g^x = a mod n

python(sympy库) x=sympy.discrete_log(n,a,g)

from Crypto.Util.number import*
from gmpy2 import*
from sympy import*
from libnum import* c = 169169912654178
p = 28977097
q = 18195301
n = p*q
e = discrete_log(n,c1,2)#通过离散对数求出e
phi = (p-1)*(q-1)
d= invert(e,phi)
m = n2s(pow(c,int(d),n))
print(m)

b'345y!'

附录

MOD运算

  取余与取模还是有区别的,见 https://blog.csdn.net/coder_panyy/article/details/73743722

  mod运算,即求余(取模)运算,是在整数运算中求一个整数 x 除以另一个整数y的余数的运算,且不考虑运算的商。在计算机程序设计中都有MOD运算,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。

  给定一个正整数p,任意一个整数n,一定存在等式 :

  取模运算:a % p(或a mod p),表示a除以p的余数。

  运算规则

    模运算与基本四则运算有些相似,但是除法例外。其规则如下:

      (a + b) % p = (a % p + b % p) % p (1)

      (a - b) % p = (a % p - b % p) % p (2)

      (a * b) % p = (a % p * b % p) % p (3)

      a ^ b % p = ((a % p)^b) % p (4)

    结合律:

      ((a+b) % p + c) % p = (a + (b+c) % p) % p (5)

      ((ab) % p * c)% p = (a * (bc) % p) % p (6)

    交换律:

      (a + b) % p = (b+a) % p (7)

      (a * b) % p = (b * a) % p (8)

    分配律:

      (a+b) % p = ( a % p + b % p ) % p (9)

      ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (10)

    重要定理:

      若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(11)

      若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(12)

      若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),(a * c) ≡ (b * d) (%p);

[NPUCTF2020]认清形势,建立信心的更多相关文章

  1. 《Power》读书笔记

    原创作品 版权所有 转载请注明出处! 序言 权力是“争”来的,不是“等”来的. 会计.工商管理.营销和销售部门.财务人员(背景).企业咨询小组 在位晋升而竞争的时候,对于公平竞争原则,有些人会采取变通 ...

  2. [转载]点评阿里云、盛大云等国内IaaS产业

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:刘黎明      原文地址:http://www.chinacloud.org ...

  3. 学Java的前景与就业,资深程序员教你怎么开始学Java!

    IT行业一直是就业的热门岗位,程序员这个职业稳定性和收入比都有着不错的前景,那么学Java的前景和就业是什么样的呢?随着入行Java的准程序员越来越多,各种学习Java的流派也层出不穷!其实在编程的世 ...

  4. 自学 Java 怎么入门

    自学 Java 怎么入门? 595赞同反对,不会显示你的姓名     给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...

  5. validate插件深入学习-01 小白从看透一个插件开始

    没有编程基础的的我,即使看了一遍jq文档也不知道怎么写程序,一个新的插件看了也不知道怎么用. 总是想做自己会的,自己不会的永远不去触碰,就永远不会. 都说编程这东西,很多都有很像的地方了,一个语言学通 ...

  6. 我爱记单词(iWords)之NABC by张恿

    1) N (Need 需求) 我们组的项目是做一个英语学习助手,前人的基础上开发新的功能,修改原来功能的bug等等.之前的版本只提供了主动“看单词”和单词测试的功能,我们希望增加背单词的功能,以便更好 ...

  7. DevOps的修炼之路!

    作为一名产品经理,首先要知道产品对于所属公司来说意味着什么,要探寻这个问题,我们又得知道和公司息息相关的是什么,在我的理解来看,与公司状况相关的因素有以下这些: 市场份额 平均订单金额 盈利能力 资产 ...

  8. 【Sharing】如何成为一名黑客

    [声明]此文为转载,只为收藏. 从小到大听说了无数关于“电脑黑客”的故事,比如XXX入侵美国五角大楼,再比如前几年的“熊猫烧香”病毒,这些故事的主角都被我们的媒体称之为“黑客”.其实这些人,更大程度上 ...

  9. java: Eclipse jsp tomcat 环境搭建(完整)

    ] 欢迎您! 要学习一门语言,首先要做的就是搭建环境,然后能写一个小的Demo(类似Helloworld),不仅可以建立信心,而且还可以为之后的学习搭建一个验证平台,事半功倍. net领域的vs,号称 ...

  10. 成为Web开发人员的7个简单步骤

    你想成为一名 Web 开发人员,但现在你面前有这样一个问题,那就是你没有在高科技行业工作的经验.你上了一些课程,也花了时间在个人编码项目上,但是你的简历上关于“经验”的部分仍然不为企业承认.过渡到一个 ...

随机推荐

  1. QT中常用控键

    1.TableWidget类 1.1. 表格属性设置 1.1.1设置行列属性 //设置行列均分 tableWidget->horizontalHeader()->setStretchLas ...

  2. Law of Iterated Expectations & Covariance

    Law of Iterated Expectations \(E[Y] = E_X[E[Y |X]].\) The notation \(E_X[.]\) indicates the expectat ...

  3. Python二维码扫描

    原文链接:https://blog.easyctf.cn/Moxin/59365.html 模块准备 1.pyzbar pip install pyzbar 2.PIL 注意:PIL只支持Python ...

  4. [编程基础] Python装饰器入门总结

    Python装饰器教程展示了如何在Python中使用装饰器基本功能. 文章目录 1 使用教程 1.1 Python装饰器简单示例 1.2 带@符号的Python装饰器 1.3 用参数修饰函数 1.4 ...

  5. 如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证

    引言 由于 HTTP 协议是无状态的,完成操作关闭浏览器后,客户端和服务端的连接就断开了,所以我们必须要有一种机制来保证客户端和服务端之间会话的连续性,也称为认证,最常见的应用场景就是保持用户的登录态 ...

  6. [cocos2d-x]捕鱼达人鱼和子弹的碰撞检测

    检测方法如图所示,步骤在注释中也写的很清楚了.

  7. dispatch_source_t定时器

    定时器简述 在iOS中,计时器是比较常用的,用于统计累加数据或者倒计时等,计时器大概有那么三种,分别是: NSTimer CADisplayLink dispatch_source_t 比较 1.NS ...

  8. 【FAQ】申请运动健康服务验证环节常见问题及解答

    华为 HMS Core 运动健康服务(HUAWEI Health Kit)提供原子化数据开放.应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服 ...

  9. vulnhub靶场之DIGITALWORLD.LOCAL: VENGEANCE

    准备: 攻击机:虚拟机kali.本机win10. 靶机:digitalworld.local: VENGEANCE,下载地址:https://download.vulnhub.com/digitalw ...

  10. 【开源】libserial_protocol:适用于单片机的串口通信协议基础库

    借助五一假期,写了一个串口通信协议基础库,虽然写着适用于单片机,但实际上并不限制具体的硬件平台. 特点如下: 不涉及到具体硬件,libserial_protocol 纯软件协议,与具体硬件分离. 内存 ...