p+1光滑攻击

news/2025/3/11 14:37:59/文章来源:https://www.cnblogs.com/SevensNight/p/18765013

题目:

from Crypto.Util.number import *
from random import choiceflag = b'NSSCTF{******}'def getMyPrime(nbits):while True:p = 1while p.bit_length() <= nbits:p *= choice(sieve_base)if isPrime(p-1):return p-1p = getMyPrime(256)
q = getMyPrime(256)n = p*q
e = 65537
m = bytes_to_long(flag)c = pow(m, e, n)print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')'''
n = 63398538193562720708999492397588489035970399414238113344990243900620729661046648078623873637152448697806039260616826648343172207246183989202073562200879290937
e = 65537
c = 26971181342240802276810747395669930355754928952080329914687241779532014305320191048439959934699795162709365987652696472998140484810728817991804469778237933925
'''

解题思路:

  • 当p是N的因数,并且p+1是光滑数,可以考虑使用Williams的p+1算法来分解N

知识拓展:

Williams的p+1算法

看不懂,懒得写

大整数分解算法 之 Williams’s p+1 算法原理 - TLSN - 博客园

解答:

from Crypto.Util.number import *
from gmpy2 import *
from itertools import countn = 63398538193562720708999492397588489035970399414238113344990243900620729661046648078623873637152448697806039260616826648343172207246183989202073562200879290937
e = 65537
c = 26971181342240802276810747395669930355754928952080329914687241779532014305320191048439959934699795162709365987652696472998140484810728817991804469778237933925def mlucas(v, a, n):v1, v2 = v, (v ** 2 - 2) % nfor bit in bin(a)[3:]: v1, v2 = ((v1 ** 2 - 2) % n, (v1 * v2 - v) % n) if bit == "0" else ((v1 * v2 - v) % n, (v2 ** 2 - 2) % n)return v1def primegen():yield 2yield 3yield 5yield 7yield 11yield 13ps = primegen()  # yay recursionp = ps.__next__() and ps.__next__()q, sieve, n = p ** 2, {}, 13while True:if n not in sieve:if n < q:yield nelse:next, step = q + 2 * p, 2 * pwhile next in sieve:next += stepsieve[next] = stepp = ps.__next__()q = p ** 2else:step = sieve.pop(n)next = n + stepwhile next in sieve:next += stepsieve[next] = stepn += 2def ilog(x, b):  # greatest integer l such that b**l <= x.l = 0while x >= b:x /= bl += 1return ldef attack(n):for v in count(1):for p in primegen():e = ilog(isqrt(n), p)if e == 0:breakfor _ in range(e):v = mlucas(v, p, n)g = gcd(v - 2, n)if 1 < g < n:return int(g), int(n // g)  # g|nif g == n:breakp, q = attack(n)phi = (p-1)*(q-1)
d = invert(e, phi)
m = powmod(c, d, n)
print(long_to_bytes(m))
#NSSCTF{p+1_smooth_number}

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

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

相关文章

Linux安装Ollama服务

背景 Ollama官方提供了一键式安装脚本,但因国内网络问题,效率太低,所以探索更为快捷方式。 我的系统信息如下 root@yan:/mnt/d/data# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Code…

C学习笔记-311

多维数组和指针 为什么需要数组为了解决大量同类型数据的存储和使用问题。 用数组可以模拟现实世界。Int a[25]:一维数组,可以当做一个线性结构。 Int a[8][6]:可以当做一个平面,意思是8行6列。有48个元素。 Int a[3][4][5]:可以当做一个三维立体。 Int a[3][4][5][6]:可…

e与(p-1)或(q-1)均不互素

题目: from Crypto.Util.number import bytes_to_long from secret import flage = 0x14 p = 7330895897249035860738209657929637460767893905398244379628076799548083100726568174238286139385106848645676643457511649442694896479642275193079806880680590593771233914993…

e与(q-1)互素,但用上题方法求不出

题目: c = 2485360255306619684345131431867350432205477625621366642887752720125176463993839766742234027524 n = 0x2CAA9C09DC1061E507E5B7F39DDE3455FCFE127A2C69B621C83FD9D3D3EAA3AAC42147CD7188C53 e = 3解题思路:分解n得到分析得到e只与(r-1)互素,但用上题方法无法解出…

张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫

目录什么是 Selenium环境搭建与配置安装 Selenium下载浏览器驱动基础操作启动浏览器并访问网页定位网页元素通过 ID 定位通过 CSS 选择器定位通过 XPath 定位与元素交互提取数据交互操作设置等待时间切换页面执行 JavaScript 代码关闭浏览器进阶技巧使用 ActionChains 模拟用户…

DCDC电源模块

车载直流电源DCDC电源模块是一种电力电子设备,它能够在电动汽车或混动汽车的电气系统中,实现直流电源电压之间的升降转换,从而确保低压电电气系统在车辆运行过程中获得稳定且适当的电源供应。 车载直流电源DCDC电源模块是一种电力电子设备,它能够在电动汽车或混动汽车…

SpringSecurity5(1-快速入门)

Spring Security提供了简单而强大的安全机制,支持身份验证和授权。基本使用包括在Spring Boot应用中引入Spring Security依赖,配置HTTP安全规则,定义用户角色和权限。通过使用内存用户存储或集成数据库,可以实现基于表单登录、HTTP基本认证等多种认证方式,确保应用程序的安…

ASE9N20-ASEMI工业自动化专用ASE9N20

ASE9N20-ASEMI工业自动化专用ASE9N20编辑:ll 一、性能卓越,能效先锋 9N20 MOS 管最为人称道的便是它超低的导通电阻。在电路中,犹如为电流开辟了一条 “高速公路”,让电能得以高效传输,极大减少了因电阻产生的热损耗。这意味着无论是为便携设备供电的 DC - DC 转换器,还是…

LayerSkip: 使用自推测解码加速大模型推理

自推测解码是一种新颖的文本生成方法,它结合了推测解码 (Speculative Decoding) 的优势和大语言模型 (LLM) 的提前退出 (Early Exit) 机制。该方法出自论文 LayerSkip: Enabling Early-Exit Inference and Self-Speculative Decoding。它通过使用 同一个模型 的早期层来生成候…