crypto-RSA51gn1n(2025YC行业赛)

from Crypto.Util.number import *
from secret import flag
from gmpy2 import *
from sympy import *
len_flag = len(flag)
part_len = len_flag // 2

p = getPrime(512)
q = getPrime(512)
n = p * q
e = 65537
gift = pow(p+q,q,n)-p
m = bytes_to_long(flag[:part_len])
c = pow(m,e,n)
print("n =",n)
print("gift =",gift)
print("c =",c)
'''
n = 63346981472034255085144796944869159560204524101463854256533471380204947241954070570550232863727911756512907221063580420532643814758790545356027617924742282218351704578683852606684386321529174145462396717819910749994208568292917206559392445919672554886942287206100898294093300614207164991042560878227976085373
gift = 29916593165928159640995441459377537530547991772855416993906882462196774133162740702564054703320172904086307019138891173003338227844323916128208221615856216252300049711405339247597490474820320014951042846871482932698218959067729504224582142413236979969100511982953926578609311691000266598652360610239595906601
c = 33664836278458053532538560230488852904055598968452529416013346561816977260146519472488308718554462386709524560247460283462684681698285491198049387707637345707323446328306932180582272822076928264992164685072048681781987746926491180844844654233738544820214970746994771585131915840018009130308421642608297518664
'''

p = getPrime(512)
q = getPrime(512)
n = p * q
e = 65537
m = bytes_to_long(flag[part_len:])
print(flag[part_len:])
gift = pow(n-1,m-1,n**2)
c = pow(m,e,n)
print("n =",n)
print("gift =",gift)
print("c =",c)
'''
n = 86411246462075265334901494299876798734094469768641396934059460666749841870843724167585444359675021971401328325932070130331143840416606897364199654833569565782477172889544190991710960004828069214457882378223057108242767943578379042025391510313556360279419825393220826338978863895261422067834789932686159434617
gift = 7466903515129515060252441653748122217390784997942414893161427769475393792693896410384971958399503321408521685273939402540946710458935711432863515046381051318645542337647010329431113514083102548527205202370755260583988273530268726492717015466094608527991946541866083975152909668453072539975574643525146203534439105885869084048603652599942929630753177308157479682777035867484312169779054011162584652775813158745176357758109049792040287448181419195578112848390893281457236938695129783739758712916654850007665408349447112451956894114858369990570688429130992729836093581644445085228090393144183550134298329851875519139990 
c = 5696538443984440536163428764783858174840501237367713882083574918928857086850720535846848657467686659697429141954748160535923404145768474413801970868613728814499997461605748095062704344907151732061750722261156406841240548105243475005384103685584194252925484412630950487819749940268264087495133581586205299958 

'''

题解:
为了解决这个RSA问题,我们需要从两个部分中恢复flag。每个部分都提供了n、gift和c值,但gift的定义不同。

  • 第一部分中,gift与p和q的关系允许我们通过计算gcd来分解n。
    考虑gift mod q:
    gift mod q ≡ [(p+q)q mod n] - p mod q
    现在 (p+q)q mod q:由于p+q mod q ≡ p mod q,所以 (p+q)q mod q ≡ pq mod q。
    根据费马小定理,pq mod q ≡ p mod q,因为q是质数。
    所以 [(p+q)q mod n] mod q = (p+q)q mod q ≡ p mod q。
    因此 gift mod q ≡ p mod q - p ≡ 0 mod q。
    所以 gift ≡ 0 mod q。这意味着q整除gift。因此,我们可以计算gcd(gift, n)来找到q。
  • 第二部分中,gift与明文m的关系允许我们直接计算m。
    因为n-1 ≡ -1 mod n,但模n^2时,我们可以展开:
    (n-1)(m-1) = ∑i=0m−1Cm−1ini(−1)m−1−i\sum_{i=0}^{m-1} C_{m-1}^{i} n^i (-1)^{m-1-i}i=0m1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值