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

buu [BJDCTF2020]easyrsa 1

题目描述 :

from Crypto.Util.number import getPrime,bytes_to_long
from sympy import Derivative
from fractions import Fraction
from secret import flagp=getPrime(1024)
q=getPrime(1024)
e=65537
n=p*q
z=Fraction(1,Derivative(arctan(p),p))-Fraction(1,Derivative(arth(q),q))
m=bytes_to_long(flag)
c=pow(m,e,n)
print(c,z,n)
'''
output:
c = 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035
z = 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482
n = 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441
'''

题目分析:

  • 首先这里遇到了两个没见过的函数 ----> Fraction() 和 Derivative()

Fraction(a,b) 相当于 a / b (a 除 b)

Derivative(a,b),前一个参数表示求导的内容,后一个参数表示求导的主体

Derivative(arctan § ,p)的意思是以p为主体对 arctan§ 求导,得到1/(1 + p^2),同理Derivative(arth(q),q) 得到 1/(1 - q^2)

最后

Fraction(1,Derivative(arctan§,p)) = 1 + p^2,Fraction(1,Derivative(arth(q),q) = 1 - q^2

  • 得到关系式: z = p^2 +q^2,又 n = p * q,进一步得到关系式 :

(p + q) ^ 2 = z + 2n
(p - q) ^ 2 = z - 2n

用代码解出p,q

import gmpy2
from  Crypto.Util.number import *e = 65537
n = 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441
c = 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035
z = 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482p = (gmpy2.iroot(z-2*n,2)[0] + gmpy2.iroot(z+2*n,2)[0]) // 2
q = n // p 
phi_n = (p-1)*(q-1)
d = gmpy2.invert(e,phi_n)
m = gmpy2.powmod(c,d,n)
print(long_to_bytes(m))
  • 得到flag{Advanced_mathematics_is_too_hard!!!}

此题还可以直接用在线网站分解n ,得到p,q,特别简单且快速,比较暴力。但,我喜欢!

收获与体会:

  • 又了解了两个新函数:

Fraction(a,b) 相当于 a / b (a 除 b)

Derivative(a,b),前一个参数表示求导的内容,后一个参数表示求导的主体

  • 对于有n的,多尝试能否暴力分解得p,q
http://www.lryc.cn/news/23604.html

相关文章:

  • taobao.user.openuid.getbyorder( 根据订单获取买家openuid )
  • Mac iTerm2 rz sz
  • 高通平台开发系列讲解(Sensor篇)Gsensor基础知识
  • 图像处理实战--Opencv实现人像迁移
  • OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果
  • 6.补充和总结【Java面试第三季】
  • 基于ssm框架大学生社团管理系统(源码+数据库+文档)
  • vulnhub靶场NAPPING: 1.0.1教程
  • Docker基本介绍
  • 可用于标记蛋白质216699-36-4,6-ROX,SE,6-羧基-X-罗丹明琥珀酰亚胺酯
  • 高数:极限的定义
  • 大数据技术之Hadoop
  • 一文带你搞懂Go语言函数选项模式,Go函数一等公民。
  • Window.location 详细介绍
  • js侧滑显示删除按钮
  • Python - DIY - 使用dump取json某些键值对合成新的json文件
  • 深度剖析指针(中)——“C”
  • 论文阅读 | Video Frame Synthesis using Deep Voxel Flow
  • 我所理解的生活
  • debian 部署nginx https
  • SQL 层功能改进 - lookupJoin 的优化
  • 动态规划:鸣人的影分身
  • 如何为三星active2手表安装自己DIY的表盘
  • Android 项目必备(四十二)-->Android 多窗口模式
  • OpenHarmony的未来和如何做好一个开源社区
  • 二叉搜索树实现
  • 解决Spring Data Jpa 实体类自动创建数据库表失败问题
  • Elasticsearch:创建一个简单的 “你的意思是?” 推荐搜索
  • urllib之ProxyHandler代理以及CookieJar的cookie内存传递和本地保存与读取的使用详解
  • 华为造车锚定智选模式, 起点赢家赛力斯驶入新能源主航道