CTF-RSA_基于N分解的RSA题目

  • 对N进行分解(只要知道p和q,就能解出任何rsa)
  • N在有一般情况下不可分解的,如果p和q太接近,或相差过大,或pq很小等情况

1.在线查询分解网站

http://www.factordb.com/index.php

2.使用yafu工具分解

下载地址:https://sourceforge.net/projects/yafu/

#以分解49为例
yafu-x64.exe factor(49)#导入文件进行分解,主要注意文本结尾要换行!!!不然要报错
yafu-x64.exe "factor(@)" -batchfile 1.txt

3.使用费马分解

网上找的脚本,p和q太接近

def isqrt(n):x = ny = (x + n // x) // 2while y < x:x = yy = (x + n // x) // 2return xdef fermat(n, verbose=True):a = isqrt(n) # int(ceil(n**0.5))b2 = a*a - nb = isqrt(n) # int(b2**0.5)count = 0while b*b != b2:# if verbose:#     print('Trying: a=%s b2=%s b=%s' % (a, b2, b))a = a + 1b2 = a*a - nb = isqrt(b2) # int(b2**0.5)count += 1p=a+bq=a-bassert n == p * q# print('a=',a)# print('b=',b)# print('p=',p)# print('q=',q)# print('pq=',p*q)return p, q
fermat(n)

脚本2

def fermat_factorization(n):factor_list = []gmpy2.get_context().precision = 2048sqrt_n = int(gmpy2.sqrt(n))c = sqrt_nwhile True:c += 1d_square = c**2 - nif gmpy2.is_square(d_square):d_square = gmpy2.mpz(d_square)gmpy2.get_context().precision = 2048d = int(gmpy2.sqrt(d_square))factor_list.append([c+d,c-d])if len(factor_list)==1:breakreturn factor_list

4.分解出来后,用脚本解密即可

import gmpy2
import libnump=
q=
e=
c= n=p*q
phi_n=(p-1)*(q-1)#求逆元
#d=libnum.invmod(e,phi_n)
d=gmpy2.invert(e,phi_n)m=pow(c,d,n)
print(m)
print(libnum.n2s(int(m)).decode())

出题脚本

随机生成flag

import random
import hashlib
import string#字符串列表
a=string.printable
#随机生成flag
for i in range(10):flag = ""for i in range(10):flag += a[random.randint(0, 99)]flag = hashlib.md5(flag.encode()).hexdigest()print("flag{" + flag + "}")from uuid import uuid1
flag="flag{"+str(uuid1())+"}"
print(flag)

p,q接近,很快就能分解

import libnum
import gmpy2p=libnum.generate_prime(1024)
#下一个素数
q=gmpy2.next_prime(p)
print(p)
print(q)
print(gmpy2.is_prime(q))
e=65537
m="flag{20d6e2da95dcc1fa5f5432a436c4be18}"
m=libnum.s2n(m)
n=p*q
phi_n=(p-1)*(q-1)
d=libnum.invmod(e,phi_n)
c=pow(m,e,n)print("n=",n)
print ("e=",e)
print ("c=",c)

解题脚本

import  gmpy2
import libnumdef isqrt(n):x = ny = (x + n // x) // 2while y < x:x = yy = (x + n // x) // 2return xdef fermat(n, verbose=True):a = isqrt(n) # int(ceil(n**0.5))b2 = a*a - nb = isqrt(n) # int(b2**0.5)count = 0while b*b != b2:# if verbose:#     print('Trying: a=%s b2=%s b=%s' % (a, b2, b))a = a + 1b2 = a*a - nb = isqrt(b2) # int(b2**0.5)count += 1p=a+bq=a-bassert n == p * q# print('a=',a)# print('b=',b)print('p=',p)print('q=',q)# print('pq=',p*q)return p, q
n= 11236396438945464079176717143196471087880430124798640194523124584883161483744355761881720924798661332027501424643154414538029585287580122761405974427818841257794157497994556608202723391478027760181705924317533420305444809223444128034654367210331137068958693840582892819495487826045956577156074156668942232139402108462349340352898572481115406698318121299787982873916502591396884489682255184448165523604671743400422220149772905676655777228607948091675612455989601008858361759327370403306760674195506394280387024357322586732298060169962426894360775981877169895632927906390632063530920611197753716095903307467004289983267
e= 65537
c= 4260482466101011731957430920901406417434306478040387371588613512063428441001754753741853444857207349755032658064826592770143368278573527632514794087007140974732031358793249329430363014561312271335226315065519570861993052432656879088776144909638480994662696119431870831156129142403063675855781198930583825083362703887688501680905266707624440432914989795886392952354713859444836529227033324455920455610359249535012999943891644938239837207994673190694512955995798836266797112432609992164908679997257920566918693544746179908166741635316261624634351348613130319346356388546672516037747806222134853885202448682842353199133
pq=fermat(n)
p=pq[0]
q=pq[1]
phi_n=(p-1)*(q-1)
#求逆元
#d=libnum.invmod(e,phi_n)
d=gmpy2.invert(e,phi_n)
m=pow(c,d,n)
print(m)
print(libnum.n2s(int(m)).decode())

CTF-RSA_基于N分解的RSA题目相关推荐

  1. Crypto日记之picoCTF 2022中的RSA题目求解

    前言 picoCTF 2022一共66道题,队友基本都解出来了,只能说师傅们tql!共有15道Cryptography题目,其中3道RSA题目,难点应该都在整数分解的算法,借Generate师傅的wp ...

  2. BUUCTF RSA题目全解2

    RSA 1.[NCTF2019]childRSA 2.[HDCTF2019]bbbbbbrsa 3.SameMod 4.[BJDCTF2020]RSA 5.[GKCTF2020]babycrypto ...

  3. 基于张量分解和关系约束的多种类型的MicroRNA-疾病预测

    今天给大家介绍的文章是"Tensor Decomposition with Relational Constraints for Predicting Multiple Types of M ...

  4. 基于矩阵分解的推荐算法,简单入门

    摘自:http://www.cnblogs.com/kobedeshow/p/3651833.html 本文将要讨论基于矩阵分解的推荐算法,这一类型的算法通常会有很高的预测精度,也活跃于各大推荐系统竞 ...

  5. 推荐系统笔记:基于矩阵分解(总结篇)

    推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)_UQI-LIUWJ的博客-CSDN博客 推荐系统笔记:无任何限制的矩阵分解_UQI-LIUWJ的博客-CSDN博客 ...

  6. Autoformer: 基于深度分解架构和自相关机制的长期序列预测模型

    本文介绍本组时间序列预测方向的最新工作:Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Serie ...

  7. 文献学习(part9)--基于模型分解的小样本学习

    学习笔记,仅供参考,有错必究 从文献中按照本人的学习情况不完全摘录: 文章目录 基于模型分解的小样本学习 摘要 引言 小样本学习问题 本文思路 迁移学习与元学习 基于模型分解的小样本学习 摘要 机器学 ...

  8. 论文浅尝 | TuckER:基于张量分解的知识图谱补全

    笔记整理:孙泽群,南京大学计算机科学与技术系,博士研究生. 论文链接:https://arxiv.org/abs/1901.09590   背景 知识图谱是图结构的数据库,以三元组(es, r, eo ...

  9. 基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统

    本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷) 论文标题:Matrix factorization techniques for recommend ...

最新文章

  1. 连接状态_TCP 连接状态及相关命令学习
  2. sql server 2008学习13 触发器
  3. linux静默删除文件夹,Linux常用命令10 - unzip
  4. 深入详解JVM内存模型与JVM参数详细配置
  5. redis发布订阅c接口_Redis 发布/订阅机制原理分析
  6. python计算定积分_python编程通过蒙特卡洛法计算定积分详解
  7. 多态的概念,特点与使用
  8. 神马搜索聚焦大数据营销 汇川广告平台 快、准、省
  9. 透视转换oracle,使用Oracle的行列转化函数实现ASH的数据透视功能
  10. NFS在Centos 6.3下的安装
  11. 清华学姐教你如何用python处理excel数据
  12. 截图软件 : Snipaste
  13. 三绕组变压器参数计算matlab,三绕组变压器等值参数计算
  14. ArcGIS Server Image 扩展模块
  15. TeamViewer的安装和使用方法
  16. VLAN与三层交换机
  17. 贝塞尔曲线最小二乘法拟合(随意切向/切向方向统一)------路适用于绝大多数的最小二乘法拟合
  18. 固定系数与自适应结合的主动降噪耳机设计实验
  19. java计算机毕业设计网上花店系统源码+系统+mysql数据库+LW文档+部署文件
  20. 五分钟带你了解!Java程序的编译过程

热门文章

  1. OJ每日一练——点和正方形的关系
  2. Qt 去除字符串中的空格
  3. 如何合并pdf文件?
  4. 矩阵的乘法(线性代数及其应用【1】)
  5. 2-4、React+antd页面UI美化——登录界面设计
  6. [附源码]Python计算机毕业设计SSM基于社区疫情防控管理系统(程序+LW)
  7. 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(14)
  8. 【已解决-靠谱】windows server 2019安装net3.5方法
  9. 如何嗅探并下载ts并合成视频文件,m3u8文件处理
  10. CSDN博文字体设置 | 字体颜色、大小设置 | 简记 |