CTF-RSA_基于N分解的RSA题目
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题目相关推荐
- Crypto日记之picoCTF 2022中的RSA题目求解
前言 picoCTF 2022一共66道题,队友基本都解出来了,只能说师傅们tql!共有15道Cryptography题目,其中3道RSA题目,难点应该都在整数分解的算法,借Generate师傅的wp ...
- BUUCTF RSA题目全解2
RSA 1.[NCTF2019]childRSA 2.[HDCTF2019]bbbbbbrsa 3.SameMod 4.[BJDCTF2020]RSA 5.[GKCTF2020]babycrypto ...
- 基于张量分解和关系约束的多种类型的MicroRNA-疾病预测
今天给大家介绍的文章是"Tensor Decomposition with Relational Constraints for Predicting Multiple Types of M ...
- 基于矩阵分解的推荐算法,简单入门
摘自:http://www.cnblogs.com/kobedeshow/p/3651833.html 本文将要讨论基于矩阵分解的推荐算法,这一类型的算法通常会有很高的预测精度,也活跃于各大推荐系统竞 ...
- 推荐系统笔记:基于矩阵分解(总结篇)
推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)_UQI-LIUWJ的博客-CSDN博客 推荐系统笔记:无任何限制的矩阵分解_UQI-LIUWJ的博客-CSDN博客 ...
- Autoformer: 基于深度分解架构和自相关机制的长期序列预测模型
本文介绍本组时间序列预测方向的最新工作:Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Serie ...
- 文献学习(part9)--基于模型分解的小样本学习
学习笔记,仅供参考,有错必究 从文献中按照本人的学习情况不完全摘录: 文章目录 基于模型分解的小样本学习 摘要 引言 小样本学习问题 本文思路 迁移学习与元学习 基于模型分解的小样本学习 摘要 机器学 ...
- 论文浅尝 | TuckER:基于张量分解的知识图谱补全
笔记整理:孙泽群,南京大学计算机科学与技术系,博士研究生. 论文链接:https://arxiv.org/abs/1901.09590 背景 知识图谱是图结构的数据库,以三元组(es, r, eo ...
- 基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统
本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷) 论文标题:Matrix factorization techniques for recommend ...
最新文章
- 连接状态_TCP 连接状态及相关命令学习
- sql server 2008学习13 触发器
- linux静默删除文件夹,Linux常用命令10 - unzip
- 深入详解JVM内存模型与JVM参数详细配置
- redis发布订阅c接口_Redis 发布/订阅机制原理分析
- python计算定积分_python编程通过蒙特卡洛法计算定积分详解
- 多态的概念,特点与使用
- 神马搜索聚焦大数据营销 汇川广告平台 快、准、省
- 透视转换oracle,使用Oracle的行列转化函数实现ASH的数据透视功能
- NFS在Centos 6.3下的安装
- 清华学姐教你如何用python处理excel数据
- 截图软件 : Snipaste
- 三绕组变压器参数计算matlab,三绕组变压器等值参数计算
- ArcGIS Server Image 扩展模块
- TeamViewer的安装和使用方法
- VLAN与三层交换机
- 贝塞尔曲线最小二乘法拟合(随意切向/切向方向统一)------路适用于绝大多数的最小二乘法拟合
- 固定系数与自适应结合的主动降噪耳机设计实验
- java计算机毕业设计网上花店系统源码+系统+mysql数据库+LW文档+部署文件
- 五分钟带你了解!Java程序的编译过程
热门文章
- OJ每日一练——点和正方形的关系
- Qt 去除字符串中的空格
- 如何合并pdf文件?
- 矩阵的乘法(线性代数及其应用【1】)
- 2-4、React+antd页面UI美化——登录界面设计
- [附源码]Python计算机毕业设计SSM基于社区疫情防控管理系统(程序+LW)
- 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(14)
- 【已解决-靠谱】windows server 2019安装net3.5方法
- 如何嗅探并下载ts并合成视频文件,m3u8文件处理
- CSDN博文字体设置 | 字体颜色、大小设置 | 简记 |