第3天---RSA基础题型(二)

news/2024/11/17 19:25:24/文章来源:https://www.cnblogs.com/yanxiao777/p/18389643

前言:

量是一定要积累的,但是不要一味的追求量,导致学完后面的知识,忘了前面的知识,得不偿失,那我们当然要避免这种情况,那就先花点时间复习昨天的内容。

........

........

过了10min

T9.添加小因子(e与phi不互素)

一.题目:

from Crypto.Util.number import *flag = b'NSSCTF{******}'p = getPrime(512)
q = getPrime(512)e = 65537
while True:r = 2*getPrime(100)*e+1if isPrime(r):breakn = p*q*rm = bytes_to_long(flag)c = pow(m, e, n)print(f'p = {p}')
print(f'q = {q}')
print(f'r = {r}')
print(f'e = {e}')
print(f'c = {c}')'''
p = 7478755670255767435237487693415479182290330775502792675052667363676831056436638619069277770540533350723045234676443621124912287506103439704868369839725279
q = 9232828888049557325429111621080998490274442347556398052322580869768941301413255711626092627273543579067597113958627672298942570149816938335701615759283713
r = 102909133680612532601801231903654039
e = 65537
c = 142893174944324070830219394465469685943669308818639857030565389839224452373848570577201378981080333784852764502832587008270072323948511579823852437852643609820245476634896477031076952735298279618952398460203032125853063235638358942643559551563899381032067185778629120272032518475352761100115057449043142848203976076694124978394099839339406197
'''

关键步骤:

p = getPrime(512)
q = getPrime(512)e = 65537
while True:r = 2*getPrime(100)*e+1if isPrime(r):breakn = p*q*r

这段代码是一个Python代码片段,它的主要目的是生成一个满足特定条件的素数r。下面是对这段代码的详细解释:

  1. e = 65537:这行代码定义了一个变量e,并将其赋值为65537。65537是一个常用的公钥指数,在RSA加密算法中经常使用。
  2. while True::这是一个无限循环,意味着下面的代码块会不断执行,直到遇到break语句。
  3. r = 2*getPrime(100)*e+1:这行代码计算r的值。首先,调用getPrime(100)函数(这个函数没有在代码片段中定义,但我们可以推测它的作用是返回一个大约100位的素数)。然后,将这个素数与e相乘,乘以2,最后加1。这个计算的目的是生成一个候选的r值,用于后续的素数检查。
  4. if isPrime(r)::这行代码调用isPrime(r)函数(同样,这个函数没有在代码片段中定义,但可以推测它的作用是检查一个数是否是素数)来检查r是否是素数。
  5. break:如果r是素数,break语句会被执行,从而退出while循环。

总的来说,这段代码的目的是找到一个满足特定条件的素数r,即r = 2*p*e+1,其中p是一个大约100位的素数,e是65537。这个r通常用于RSA加密算法中的公钥或私钥的一部分。

二.解题wp以及代码:

1.思路: 忽略小因子求逆元,则e就与phi互素

遇到求不出逆元d(原因是r的出现让e与欧拉函数phi不互素了),这种攻击,留意一下是不是小明文攻击

可能是6个因子,就看看哪几个满足等式

就用那几个求欧拉

小明文攻击,满足条件,忽略r,用pq求欧拉函数,解d解flag

2.条件

(1)e与欧拉函数不互素
(2)满足条件m modpq=m mod pqr

img

3.wp:

flag = b'NSSCTF{******}'

flag非常短,转换为数字非常小,满足条件

img

所以直接可以忽略r求欧拉函数

img

用pq求欧拉解出逆元d即可

4.工坊官方解

img

5.解题代码:

from Crypto.Util.number import *
from gmpy2 import *p = 7478755670255767435237487693415479182290330775502792675052667363676831056436638619069277770540533350723045234676443621124912287506103439704868369839725279
q = 9232828888049557325429111621080998490274442347556398052322580869768941301413255711626092627273543579067597113958627672298942570149816938335701615759283713
r = 102909133680612532601801231903654039
e = 65537
c = 142893174944324070830219394465469685943669308818639857030565389839224452373848570577201378981080333784852764502832587008270072323948511579823852437852643609820245476634896477031076952735298279618952398460203032125853063235638358942643559551563899381032067185778629120272032518475352761100115057449043142848203976076694124978394099839339406197n = p*q*r
phi = (p-1)*(q-1)
d = invert(e, phi)
m = pow(c, d, p*q)print(long_to_bytes(m))

T10.e的倍数解m且(e与phi不互素)

一.题目:

from Crypto.Util.number import *flag = b'NSSCTF{******}'p = getPrime(512)
q = getPrime(512)e = 65537*2n = p*qm = bytes_to_long(flag)c = pow(m, e, n)print(f'p = {p}')
print(f'q = {q}')
print(f'e = {e}')
print(f'c = {c}')'''
p = 9927950299160071928293508814174740578824022211226572614475267385787727188317224760986347883270504573953862618573051241506246884352854313099453586586022059
q = 9606476151905841036013578452822151891782938033700390347379468858357928877640534612459734825681004415976431665670102068256547092636766287603818164456689343
e = 131074
c = 68145285629092005589126591120307889109483909395989426479108244531402455690717006058397784318664114589567149811644664654952286387794458474073250495807456996723468838094551501146672038892183058042546944692051403972876692350946611736455784779361761930869993818138259781995078436790236277196516800834433299672560
'''

关键步骤:

e = 65537*2

二.解题wp以及代码:

1.思路:将e的平方看做一个整体,求逆元解

将m的2次方看做m,解密即可

2.条件 m**2<n

注意条件(m**2<n)

因为大于n之后,m平方取模n就将m**2破坏了

(m**2>n的情况今天不学,后面学)

img

3.解题代码:

from Crypto.Util.number import *
from gmpy2 import *p = 9927950299160071928293508814174740578824022211226572614475267385787727188317224760986347883270504573953862618573051241506246884352854313099453586586022059
q = 9606476151905841036013578452822151891782938033700390347379468858357928877640534612459734825681004415976431665670102068256547092636766287603818164456689343
e = 131074
c = 68145285629092005589126591120307889109483909395989426479108244531402455690717006058397784318664114589567149811644664654952286387794458474073250495807456996723468838094551501146672038892183058042546944692051403972876692350946611736455784779361761930869993818138259781995078436790236277196516800834433299672560n = p*q
phi = (p-1)*(q-1)
d = invert(e // 2, phi)
m = pow(c, d, p*q)print(long_to_bytes(isqrt(m)))

结语:

来到第三天,RSA基础题型已经学习完成了,但是这点东西做正规赛RSA签到题的能力都还不具备,今天的学习时间有点少,就这样吧! 希望你能坚持下去

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python文件打开方式详解——a、a+、r+、w+、rb、rt区别

在做深度学习大作业的时候看到了这个代码:一开始以为“rb”是相对路径的意思,搜了一下结果不是。 1.排除文件打开方式错误: r只读,r+读写,不创建,即需要事先存在一个文件以供读/读写,若不存在文件会报错 w新建只写,w+新建读写,二者都会将文件内容清零,即事先不需要有…

创业团队适合的10款科研项目经费管理系统

国内外主流的 10 款科研项目经费管理系统对比:PingCode、Worktile、Colloa科研项目管理平台、云科研管理系统、智方科研管理系统、NIH Grants、NSF – National Science Foundation、IDRC、Bill & Melinda Gates Foundation、Canadian Institutes of Health Research。在管…

最常用集合 - arraylist详解

ArrayList介绍 ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当…

10款项目型企业管理系统,选择前需了解

国内外主流的 10 款企业项目管理系统对比:PingCode、Worktile、泛微 e-office、金蝶云星瀚、用友项目管理软件、Jira、Monday.com、Asana、Trello、Basecamp。在面对复杂的项目管理需求时,许多企业经常感到手头的工具不足以支撑高效的运作。有效的项目型企业管理系统不仅可以…

[js] 页面可见性API 监测用户切屏

Page Visibility API 可帮助检测用户切换页面,适用于考试或网课系统。本文介绍了 visibilitychange 事件和 document.visibilityState 的状态,并提供了基本的防作弊实现方法,如定期检查页面可见性和监听视频播放状态。Page Visibility API 在做考试系统或者网课系统的时候,…

[Paper Reading] ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models link 时间:23.11 机构:Standford TL;DR 提出ControlNet算法模型,用来给一个预训练好的text2image的diffusion model增加空间条件控制信息。作者尝试使用5w-1M的edges/depth/segmentation/pose等信…

结点电压法

如图,流过 1Ω电阻的电流是 (1+1/4)/(1+1/4+1/4)

【SpringBoot】分析 SpringBoot 中的扩展点

1 前言 SpringBoot 它给我们留了很多的扩展点,这节我们就看看都有哪些(有的扩展点是基于 Spring 的,有的我就不具体强调到底是 SpringBoot 还是 Spring 的噢)。 另外每一种扩展点我们都从两个方面来看: 入口时机:入口就是 SpringBoot 解析或者寻找你自定义的类的时机 执…

智能选择:如何筛选合适项目管理软件?

国内外主流的 10 款项目管理系统对比:PingCode、Worktile、Teambition、明道云、泛微E-cology、Asana、Trello、Monday.com、ClickUp、Wrike。在项目管理的世界里,选择合适的管理工具似乎是一个令人头疼的问题。你是否经常在众多选项中感到迷茫,不知道哪一个系统能真正提升你…

【整理】【信息收集】web渗透测试

一、WAF探测1.1 什么是WAF1.2 WAF常见的部署方式:1.3 WAF的作用1.4 如何触发waf1.5 WAF的分类1.6 如何探测WAF二、操作系统识别三、Git信息收集3.1 Git信息泄露原理3.2 github搜索技巧3.3 Git信息泄露利用方式原创 LULU 红队蓝军一、WAF探测 1.1 什么是WAF Web应用程序防火墙(…

RouteLLM:通过智能查询路由优化 AI 响应

在当今人工智能驱动的世界中,优化人工智能的使用至关重要。不同的 AI 系统 在能力和成本上各不相同,因此需要智能管理解决方案。RouteLLM 是一个创新 的框架,旨在动态地将用户查询路由到最合适的 AI 模型,确保成本效益和高质 量的响应。 什么是 RouteLLM? RouteLLM 作为 A…