CTF-RSA加密-1

news2024/11/23 20:30:09

RSA加密算法

RSA算法的具体描述如下:
(1)任意选取两个不同的大素数p和q计算乘积 n = p q n=pq n=pq φ ( n ) = ( p − 1 ) ( q − 1 ) φ(n)=(p-1)(q-1) φ(n)=(p1)(q1)

(2)任意选取一个大整数e,满足 g c d ( e , φ ( n ) ) = 1 gcd(e,φ(n))=1 gcd(e,φ(n))=1,也就是e 和φ(n)互质,整数e用做加密钥;

(3)确定的解密钥d,满足 d e m o d φ ( n ) = 1 de mod φ(n)=1 demodφ(n)=1,即 d e = k φ ( n ) + 1 , k ≥ 1 de = kφ(n)+1,k≥1 de=kφ(n)+1,k1 是一个任意的整数;
所以,若知道e和φ(n) ,则很容易计算出d;

(4)公开整数n和e,秘密保存d;即公钥 P K = ( e , n ) PK=(e,n) PK=(e,n),私钥 S K = ( d , n ) SK=(d,n) SK=(d,n);

(5)将明文m(m<n是一个整数)加密成密文c,加密算法为:
c = E ( m ) = m e m o d n c = E(m) = m^e mod n c=E(m)=memodn

(6)将密文c解密为明文m,解密算法为:
m = D ( c ) = c d m o d n m = D(c) = c^d mod n m=D(c)=cdmodn

然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

欧拉代数定理:
若n, a为正整数,且n,a互质,则,φ(n) 为欧拉函数,表示小于n且和n互质的数的个数。特别的,当n为素数时, φ ( n ) = n − 1 φ(n)=n-1 φ(n)=n1,当p,q为素数时 φ ( p q ) = ( p − 1 ) ( q − 1 ) φ(pq)=(p-1)(q-1) φ(pq)=(p1)(q1)
所以有
在这里插入图片描述参考链接:https://blog.csdn.net/qq_45198339/article/details/128741483

XCTF-RSA题

1. 初始RSA

题目描述

在这里插入图片描述
附件:

from Crypto.Util.number import bytes_to_long,inverse,getPrime
from flag import flag

m = bytes_to_long(flag)

p = getPrime(1024)
q = getPrime(1024)
n = p*q
print(n)
e = 65537

c = pow(m,e,n)

pq = p*(q-1)
qp = q*(p-1)

print("c=",c)
print("n=",n)
print("pq=",pq)
print("qp=",qp)

'''
c= 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777
n= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003
pq= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324
qp= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246
'''

分析解密

  1. 根据n、pq、qp得到 φ(n):
    pq*qp = p ∗ ( q − 1 ) ∗ q ∗ ( p − 1 ) = n ∗ ( p − 1 ) ( q − 1 ) = n ∗ φ ( n ) p*(q-1)*q*(p-1) = n*(p-1)(q-1) = n*φ(n) p(q1)q(p1)=n(p1)(q1)=nφ(n)

  2. 根据e、φ(n),求d
    使用gmpy2中的invert函数,根据 d e m o d φ ( n ) = 1 de mod φ(n)=1 demodφ(n)=1可以求得e的逆元,即私钥d:
    d=gmpy2.invert(e,φ(n))

  3. 根据c、d、n,解出明文m:
    m = pow(c,d,n) = c d m o d n c^d mod n cdmodn

  4. 最后将明文m转换成bytes得到flag

脚本如下

from Crypto.Util.number import *
import gmpy2

'''
n = p*q
e = 65537
c = pow(m,e,n)
pq = p*(q-1)
qp = q*(p-1)
'''

e = 65537
c= 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777
n= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003
pq= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324
qp= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246


phi = (pq * qp)//n   #除法使用地板除//得到整数,而传统除法和精确除法/得到的都是浮点数,会有溢出的问题
d = gmpy2.invert(e,phi)
print("d=",d)
m = pow(c,d,n)
print("m=",m)

flag = long_to_bytes(m)
print("flag=",flag)

#flag= b'flag{719014b3-c4e1-4f81-a7be-b4f0d65c9e10}'

2. baigeiRSA

题目描述

在这里插入图片描述

import libnum
from Crypto.Util import number
from secret import flag

size = 128
e = 65537
p = number.getPrime(size)
q = number.getPrime(size)
n = p*q

m = libnum.s2n(flag)
c = pow(m, e, n)

print('n = %d' % n)
print('c = %d' % c)

'''
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
'''

分析解密

  1. n比较小,尝试直接分解pq
  • 在线分解:http://factordb.com/
  • yafu工具分解:
    • 进入yafu目录,运行yafu-x64,输入factor()分解命令;
    • 若n比较大,可以将大数存在p.txt里面,记得最后要换行再保存,然后再输入命令yafu-x64 “factor(@)” -batchfile p.txt
      在这里插入图片描述或者yafu-x64 "factor(@)" -batchfile p.txt
      在这里插入图片描述 - 使用RAS-Tool工具
  1. p,q可以直接计算φ(n),然后根据m = c d m o d n c^d mod n cdmodn = pow(c,d,n)解出明文
  2. libnum.s2n(flag)是将字符串转换为十进制整数,使用libnum.n2s进行还原

脚本如下

import gmpy2
import libnum
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
e = 65537

#n比较小,尝试直接分解pq
p = 274539690398523616505159415195049044439
q = 322368694010594584041053487661458382819
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi) #p,q,e求d
m = pow(c,d,n)
print("m=",m)
print(libnum.n2s(int(m))

#m= 27060087196965709690728077779982651425716608910311549
#b'HSCTF{@Zh3n_Ba1_G3i!@}'

3.RSARSA

题目描述

在这里插入图片描述
在这里插入图片描述nc访问:
在这里插入图片描述
emmm找了一下,是pwn结合crypto,先放放
解题链接:https://blog.csdn.net/figfig55/article/details/128508274

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据之LibrA数据库系统告警处理(ALM-12010 Manager主备节点间心跳中断)

告警解释 当主Manager节点在7秒内没有收到备Manager节点的心跳信号时&#xff0c;产生该告警。 当主Manager节点收到备Manager节点的心跳信号后&#xff0c;告警恢复。 告警属性 告警参数 对系统的影响 如果主Manager进程异常&#xff0c;主备倒换无法进行&#xff0c;影响…

云主机VNC报错 fork:cannot allocate memory ,也无法SSH

查找解决办法,发现大部分都是因为现有的进程数超过系统设置最大进程数 开始排查: 1.重启系统然后SSH连接(刚启动进程少是可以连上的),查看系统设置的最大进程数: 1.1 执行以下命令,查看系统 pid_max 值。 sysctl -a | grep pid_max根据返回结果,进行对应操作: 返回…

Linux越学越头疼,我要怎么办?

最近&#xff0c;听到一些同学说&#xff0c;“Linux越学越头疼”。其实这句话&#xff0c;在我之前刚接触Linux的时候&#xff0c;也是深有感触。Linux越学越不明所以。最后干脆放弃学习&#xff0c;转而学习其他东西。 其实大家在初学Linux的时候&#xff0c; 有这个感受&am…

Midjourney prompt 大赏(亲测可用)

AI 绘图是什么 AI 绘画&#xff0c;顾名思义就是利用人工智能进行绘画&#xff0c;是人工智能生成内容&#xff08;AIGC&#xff09;的一个应用场景。其主要原理简单来说就是收集大量已有作品数据&#xff0c;通过算法对它们进行解析&#xff0c;最后再生成新作品&#xff0c;…

RocketMQ sql92的使用及原理简单分析附源码

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 RocketMQ 版本 5.1.0 RokcetMQ消息过滤 目前官方支持的消息过滤方式主要有两种 tagsql92 我们可以通过查看ExpressionType的源码证明 tag过滤方式是现在最为…

【计算机网络】(谢希仁第八版)第三章课后习题答案

第三章 1.数据链路(即逻辑链路)与链路(即物理链路)有何区别? “电路接通了”与”数据链路接通了”的区别何在? 答&#xff1a;数据链路与链路的区别在于数据链路出链路外&#xff0c;还必须有一些必要的规程来控制数据的传输&#xff0c;因此&#xff0c;数据链路比链路多了…

不要在不使用cvx优化的场合使用log_det,应改为log(det(..)),否者可能会出现奇怪的错误

跑代码的时候遇到的问题 %% 分解为功率和单位模&#xff0c;交替优化功率分量和单位模clc;clear; Nt 8; % 发射天线数目 8 Nr 4; % 接收天线数目 4 Ne 6; % Eve天线数目 6 noisePower 1; SNRTotaldB -5:5:35; %%%%最大发射功率单位dB SNRTotal 10.^(SNRTotaldB./…

运动耳机品牌排行榜前十名,运动耳机品牌有哪些?

​当你在健身房挥汗如雨&#xff0c;或者在户外享受大自然的时候&#xff0c;最想要的是听歌放松心情&#xff0c;而运动耳机就像一个不知疲倦的伙伴&#xff0c;陪着你度过每一刻。它的稳定性和舒适性在最大程度上保证了你可以专注于你的运动&#xff0c;而不用分心于耳机的位…

基于springboot实现原创歌曲分享平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现原创歌曲分享平台演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&am…

创建ABAP数据库表和ABAP字典对象-理解表字段02

理解表字段 这一步&#xff0c;您将定义表字段。首先&#xff0c;你需要了解你的需求: 内置的ABAP类型和新定义的字段类型 下面我们将会创建3个字段类型在数据库表中。 ●内置字段类型&#xff1a;最快的方法:应用系统已经提供好的字段类型&#xff0c;基本类型、长度和描述…

AGENTBENCH:评估LLMs作为代理的能力

背景&#xff1a; 这篇文章介绍了他们是如何去构造智能Agent评测集&#xff0c;以及如何对智能Agent能力做了几大分类。如果你无法评测一个问题&#xff0c;那么往往你也不能很好的解决一个问题。评测集的设计往往是更深入本质&#xff0c;因为评测集测试的是更泛化能力&#…

Find My磁吸卡包|苹果Find My技术与磁吸卡包结合,智能防丢,全球定位

2020年苹果发布会上&#xff0c;磁吸卡包应运而生&#xff0c;磁吸卡包可放入银行卡、交通卡等常规卡片&#xff0c;通过磁力轻松吸附在iPhone或MagSafe磁吸保护壳背后&#xff0c;用户轻装出门携带卡片更方便。 在智能化加持下&#xff0c;磁吸卡包加入防丢功能&#xff0c;…

高速光耦合器TLP2361(TPL,E(T 在工业网络中的应用

TLP2361(TPL,E(T 由一个高输出 GaA ℓAs 发光二极管与集成的高增益、高速光电探测器组成。它采用 SO6 封装。 该光电耦合器可保证在高达 125 C 和 2.7 V 至 5.5 V 电源下运行。由于 TLP2361 已保证 1 mA 低电源电流 (ICCL/ICCH) 和 1.6 mA (Ta 125 C) 低阈值输入电流&#xf…

论坛类型知识问答科普源码系统 带完整搭建教程

在互联网上&#xff0c;用户对于获取各类知识的需求不断增长&#xff0c;尤其是对于一些专业性较强或者较为冷门的知识领域。传统的搜索引擎并不能完全满足用户的需求&#xff0c;因此&#xff0c;开发一款针对特定知识领域的问答系统变得尤为重要。今天源码小编来给大家介绍一…

java修仙传之海岛奇遇

昨日开会&#xff0c; 商量了一下接口返回数据&#xff0c; 要求统一&#xff0c; 之前也同意&#xff0c;直接抛异常&#xff0c; 现在觉得之前那个异常不好&#xff0c; 看着不美观&#xff0c;对客户不友好 要求重新做。 大概要求如下&#xff1a; 要求1&#xff1a;范…

公派访问学者申请应该如何选择国家?

选择国家是公派访问学者申请中至关重要的一步。不同国家拥有各自独特的文化、教育体系和研究环境&#xff0c;因此&#xff0c;选择合适的国家对于一个学者的职业生涯和学术发展至关重要。下面将探讨一些选择国家时需要考虑的因素。 首先&#xff0c;你应该考虑自己的研究领域和…

干货 | 一文详解华为ITR流程体系:目标、流程、理念

华为著名的三大流程IPD、LTC、ITR让研发、营销、服务三大板块联动&#xff0c;以客户为中心提供高质量且不断改善的产品和服务。其中ITR大大提升了客服部门的效率和服务水平&#xff0c;还让客服在服务过程中有增加销售的可能。本文详解华为ITR的概念、目标、地位、构成、理念&…

linux编译boost库并执行程序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、--prefix命令 二、安装过程 1、shell脚本&#xff1a; 2、gcc编译环境 执行过程 三、linux下执行cpp程序 总结 前言 提示&#xff1a;这里可以添加本文…

Gopro hero5运动相机格式化后恢复案例

Gopro运动相机以稳定著称&#xff0c;旗下的Hero系列销售全球。下面我们来看一个Hero5格式化后拍了少量素材的恢复案例。 故障存储:64G MicroSD卡 Exfat文件系统 故障现象: 64G的卡没备份数据时做了格式化操作又拍了一条&#xff0c;发现数据没有备份&#xff0c;客户自行使…

Qt 窗口无法移出屏幕

1 使用场景 设计一个缩进/展开widget的效果&#xff0c;抽屉效果。 看到实现的方法有定时器里move窗口&#xff0c;或是使用QPropertyAnimation。 setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint |Qt::X11BypassWindowManagerHint&#xff09;&#xff1b; 2 窗口属…