Nssctf.crypto RSA

1、[SWPUCTF 2021 新生赛]crypto2

考点:共模攻击

import gmpy2
from Crypto.Util.number import *

e1= 3247473589
e2= 3698409173
c1 = 
c2 = 
n = 
g,x,y = gmpy2.gcdext(e1, e2)            #步骤一:xe1 + ye2 = 1 解出x , y
print(x,y)
m = pow(c1, x , n) * pow(c2, y, n) % n #步骤二:由扩展欧几里得算法可得
print(long_to_bytes(m))

2、[羊城杯 2021]Bigrsa

考点:共享素数

(1)算出最大公约数

q=gmpy2.gcd(n1,n2)

q=gmpy2.gcd(n1,n2)
p1=n1//q  
p2=n2//q  
phi_n1=(q-1)*(p1-1)  
phi_n2=(q-1)*(p2-1) 

(2)算出d1;d2;然后解密

import gmpy2  
import libnum  
c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264  
n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061  
n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073  
e = 65537  
#求最大公约数  
q=gmpy2.gcd(n1,n2)  
p1=n1//q  
p2=n2//q  
phi_n1=(q-1)*(p1-1)  
phi_n2=(q-1)*(p2-1)  
#求解逆元d  
d1 = libnum.invmod(e,phi_n1)  
d2 = libnum.invmod(e,phi_n2)  
c1 = pow(c,d2,n2)  #排在后面先解后边  
c2 = pow(c1,d1,n1)  
print(libnum.n2s(int(c2)).decode())

3、[SWPU 2020]happy

考点:二元一次方程组

https://www.cnblogs.com/AllFalls/articles/17948529#_label9

4、[SWPUCTF 2021 新生赛]crypto4

考点:p q很接近

(1)p q 很接近

p = getPrime(512)
q = next_prime(p)

(2)直接对n进行开放;然后计算f的下一个素数即可

from Crypto.Util.number import *
from gmpy2 import *

flag = 10227915341268619536932290456122384969242151167487654201363877568935534996454863939953106193665663567559506242151019201314446286458150141991211233219320700112533775367958964780047682920839507351492644735811096995884754664899221842470772096509258104067131614630939533042322095150722344048082688772981180270243
n = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
q = next_prime(isqrt(n))
p = n // q
assert p*q == n
e = 0x10001
phi = (p - 1)*(q - 1)
d = inverse(e, phi)
m = pow(flag, d, n)
print(long_to_bytes(m))

5、[鹤城杯 2021]Crazy_Rsa_Tech

考点:低解密指数攻击 p高位泄露 中国剩余定理

from xenny.ctf.crypto.modern.asymmetric.rsa.lowe_broadcast import attack
from Crypto.Util.number import long_to_bytes

n_list = [71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799, 92503831027754984321994282254005318198418454777812045042619263533423066848097985191386666241913483806726751133691867010696758828674382946375162423033994046273252417389169779506788545647848951018539441971140081528915876529645525880324658212147388232683347292192795975558548712504744297104487514691170935149949, 100993952830138414466948640139083231443558390127247779484027818354177479632421980458019929149817002579508423291678953554090956334137167905685261724759487245658147039684536216616744746196651390112540237050493468689520465897258378216693418610879245129435268327315158194612110422630337395790254881602124839071919, 59138293747457431012165762343997972673625934330232909935732464725128776212729547237438509546925172847581735769773563840639187946741161318153031173864953372796950422229629824699580131369991913883136821374596762214064774480548532035315344368010507644630655604478651898097886873485265848973185431559958627423847, 66827868958054485359731420968595906328820823695638132426084478524423658597714990545142120448668257273436546456116147999073797943388584861050133103137697812149742551913704341990467090049650721713913812069904136198912314243175309387952328961054617877059134151915723594900209641163321839502908705301293546584147, 120940513339890268554625391482989102665030083707530690312336379356969219966820079510946652021721814016286307318930536030308296265425674637215009052078834615196224917417698019787514831973471113022781129000531459800329018133248426080717653298100515701379374786486337920294380753805825328119757649844054966712377, 72186594495190221129349814154999705524005203343018940547856004977368023856950836974465616291478257156860734574686154136925776069045232149725101769594505766718123155028300703627531567850035682448632166309129911061492630709698934310123778699316856399909549674138453085885820110724923723830686564968967391721281, 69105037583161467265649176715175579387938714721653281201847973223975467813529036844308693237404592381480367515044829190066606146105800243199497182114398931410844901178842049915914390117503986044951461783780327749665912369177733246873697481544777183820939967036346862056795919812693669387731294595126647751951, 76194219445824867986050004226602973283400885106636660263597964027139613163638212828932901192009131346530898961165310615466747046710743013409318156266326090650584190382130795884514074647833949281109675170830565650006906028402714868781834693473191228256626654011772428115359653448111208831188721505467497494581]
c_list = [62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585, 46186240819076690248235492196228128599822002268014359444368898414937734806009161030424589993541799877081745454934484263188270879142125136786221625234555265815513136730416539407710862948861531339065039071959576035606192732936477944770308784472646015244527805057990939765708793705044236665364664490419874206900, 85756449024868529058704599481168414715291172247059370174556127800630896693021701121075838517372920466708826412897794900729896389468152213884232173410022054605870785910461728567377769960823103334874807744107855490558726013068890632637193410610478514663078901021307258078678427928255699031215654693270240640198, 14388767329946097216670270960679686032536707277732968784379505904021622612991917314721678940833050736745004078559116326396233622519356703639737886289595860359630019239654690312132039876082685046329079266785042428947147658321799501605837784127004536996628492065409017175037161261039765340032473048737319069656, 1143736792108232890306863524988028098730927600066491485326214420279375304665896453544100447027809433141790331191324806205845009336228331138326163746853197990596700523328423791764843694671580875538251166864957646807184041817863314204516355683663859246677105132100377322669627893863885482167305919925159944839, 2978800921927631161807562509445310353414810029862911925227583943849942080514132963605492727604495513988707849133045851539412276254555228149742924149242124724864770049898278052042163392380895275970574317984638058768854065506927848951716677514095183559625442889028813635385408810698294574175092159389388091981, 16200944263352278316040095503540249310705602580329203494665614035841657418101517016718103326928336623132935178377208651067093136976383774189554806135146237406248538919915426183225265103769259990252162411307338473817114996409705345401251435268136647166395894099897737607312110866874944619080871831772376466376, 31551601425575677138046998360378916515711528548963089502535903329268089950335615563205720969393649713416910860593823506545030969355111753902391336139384464585775439245735448030993755229554555004154084649002801255396359097917380427525820249562148313977941413268787799534165652742114031759562268691233834820996, 25288164985739570635307839193110091356864302148147148153228604718807817833935053919412276187989509493755136905193728864674684139319708358686431424793278248263545370628718355096523088238513079652226028236137381367215156975121794485995030822902933639803569133458328681148758392333073624280222354763268512333515]

print(long_to_bytes(attack(n_list=n_list, c_list=c_list, e=9)[0]))

6、[SWPUCTF 2021 新生赛]crypto5

考点:暴力开放

(1)根据m=c^e modn ;但是m<n;说明n没有参与运算;所以直接对c开e次方得到c

c = 25166751653530941364839663846806543387720865339263370907985655775152187319464715737116599171477207047430065345882626259880756839094179627032623895330242655333
n = 134109481482703713214838023035418052567000870587160796935708584694132507394211363652420160931185332280406437290210512090663977634730864032370977407179731940068634536079284528020739988665713200815021342700369922518406968356455736393738946128013973643235228327971170711979683931964854563904980669850660628561419
for i in range(1,100):
m,b = iroot(c,i)
if b:
print(i)
print(long_to_bytes(m))

(2)或者使用低解密指数攻击就可以

7、[BJDCTF 2020]rsa toutuxing

考点:RSA-爆破e

(1)题目给出e的范围;根据pow(c,e,n)=m;爆破出e解密就行

‍```python
for e in range(1,100000)
NSSCTF相关的加密(Crypto)题目中,解题通常围绕密码学基础理论、加密算法、密钥管理、以及常见的攻击方式展开。以下是一些典型题型的解析与解题思路,结合实际题目与背景知识进行说明。 ### 1. RSA 加密分析 在许多CTF比赛中,RSA加密题目是常见类型之一。例如在题目中提供了 `p`、`q`、`c` 和 `e`,要求恢复明文 `m`。此时,解题的关键在于计算私钥 `d`,然后使用 `pow(c, d, n)` 来解密。 以某题为例,给出的参数如下: ```python p = 86053582917386343422567174764040471033234388106968488834872953625339458483149 q = 72031998384560188060716696553519973198388628004850270102102972862328770104493 c = 3939634105073614197573473825268995321781553470182462454724181094897309933627076266632153551522332244941496491385911139566998817961371516587764621395810123 e = 74 ``` [^1] 解题步骤如下: - 计算模数 `n = p * q` - 计算欧拉函数 `φ(n) = (p - 1) * (q - 1)` - 计算私钥 `d = inverse(e, φ(n))`,即 `d ≡ e^(-1) mod φ(n)` - 最后使用 `m = pow(c, d, n)` 得到明文 由于 `e` 和 `φ(n)` 必须互素,若 `gcd(e, φ(n)) != 1`,则无法计算 `d`,这可能导致题目出现异常情况,例如无法直接解密。 ### 2. 低指数攻击(Low Public Exponent Attack) 当 `e` 较小时(如 `e=3`),且相同明文被多个不同模数加密时,可使用中国剩余定理(CRT)进行攻击。若 `c = m^e mod n1`, `c = m^e mod n2`, `c = m^e mod n3`,则可利用 CRT 恢复 `m^e`,再开 `e` 次方根即可得到明文 `m` [^1]。 ### 3. 维吉尼亚密码(Vigenère Cipher) 在某些古典密码题目中,维吉尼亚密码常被使用。其解法包括: - **卡西斯基测试**:用于估算密钥长度 - **频率分析**:对每个分组进行字母频率分析,推测密钥字符 例如,题目中出现的密文可能是经过维吉尼亚加密的文本,解密时需先确定密钥长度,再逐字符推测密钥。 ### 4. 二进制编码与八卦表示法 在部分题目中,使用了二进制编码与八卦的对应关系。例如,阳爻(—)表示“1”,阴爻(--)表示“0”。每三个八卦组合构成一个3位二进制数,表示一个八进制字符,进而映射到ASCII码 [^4]。 具体步骤如下: - 将八卦序列转换为二进制字符串 - 每9位二进制数转换为一个十进制数 - 将十进制数转换为对应的ASCII字符 ### 5. Base64 编码与混淆 在某些题目中,可能嵌入了Base64编码的字符串,如: ``` Q0ZMQUdTICs9IC1XZXJyb3IgLVdhbGw= ``` [^3] 解码后可能得到进一步线索,例如: ```bash echo "Q0ZMQUdTICs9IC1XZXJyb3IgLVdhbGw=" | base64 -d # 输出:CFLAGS += -Werror -Wall ``` 这可能与后续编译过程、漏洞挖掘有关。 ### 6. 文本隐写术(Steganography) 在部分题目中,信息可能被隐藏在文本中。例如,在一段看似无意义的英文中,隐藏了flag信息。解法包括: - 分析每行首字母 - 分析特定词组的出现频率 - 利用隐写工具(如 `steghide`)提取隐藏信息 示例文本: ``` The whole world is a gigantic stage ... ``` [^2] 通过提取某些字母或单词,可能得到隐藏的flag。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巅峰赛2000分以下是巅峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值