BMZCTF SDNISC2020_RSA

"本文介绍了一个涉及RSA加密的实例,展示了如何利用共模攻击来解密两个加密后的消息。通过数学计算,使用exgcd算法找到私钥,并成功还原出原始的明文信息,解出的flag为flag{8c16c91be3f3287ff5a10167e922b33b}
摘要由CSDN通过智能技术生成

下载附件,为一个文本文件。其内容为

可以得知:n,c1,e1,c2,e2。为典型的RSA的共模攻击。

使用脚本:

n = 0xa1d4d377001f1b8d5b2740514ce699b49dc8a02f12df9a960e80e2a6ee13b7a97d9f508721e3dd7a6842c24ab25ab87d1132358de7c6c4cee3fb3ec9b7fd873626bd0251d16912de1f0f1a2bba52b082339113ad1a262121db31db9ee1bf9f26023182acce8f84612bfeb075803cf610f27b7b16147f7d29cc3fd463df7ea31ca860d59aae5506479c76206603de54044e7b778e21082c4c4da795d39dc2b9c0589e577a773133c89fa8e3a4bd047b8e7d6da0d9a0d8a3c1a3607ce983deb350e1c649725cccb0e9d756fc3107dd4352aa18c45a65bab7772a4c5aef7020a1e67e6085cc125d9fc042d96489a08d885f448ece8f7f254067dfff0c4e72a63557



e1 = 0xf4c1158f



c1 = 12051796366524088489284445109295502686341498426965277230069915294159131976231473789977279364263965099422235647723775278060569378071469131866368399394772898224166518089593340803913798327451963589996734323497943301819051718709807518655868569656941242449109980876397661605271517459716669684900920279597477446629607627693769738733623143693170696779851882404994923673483971528314806130892416509854017091137325195201225617407959645788145876202882024723106204183257094755002924708009138560347432552090905489132135154932987521239299578509008290614398700799670928805692609756924823628055245227290288940649158862576448537833423



e2 = 0xf493f7d1



c2 = 16648382384980770705624348910895797622774711113202207693584907182552301186239613809347201161450012615995859738410661452438496756353485538305614949211776668793864984429696790944750894691957799234264508530084026894611228513698963347402329109838109621609770406925700520983387811451074838470370044678634099202003480925903267508744006195455234025325060817223813858985074720872124168142943926467694676717713503559007112874381750005406371400109962943508349497151148446064846096531445037416174913915923050332242843403926133165817310272633884358263778516770288515592959832151762499526363131801945163501999337808208074381212795



import  gmpy2

import  binascii

import  rsa

import math

from Crypto.Util import number

def exgcd(m, n, x, y):

    if n == 0:

        x = 1

        y = 0

        return (m, x, y)

    a1 = b = 1

    a = b1 = 0

    c = m

    d = n

    q = int(c / d)

    r = c % d

    while r:

        c = d

        d = r

        t = a1

        a1 = a

        a = t - q * a

        t = b1

        b1 = b

        b = t - q * b

        q = int(c / d)

        r = c % d

    x = a

    y = b

    return (d, x, y)

ans=exgcd(e1,e2,0,0)

s1=ans[1]

s2=ans[2]

m=(gmpy2.powmod(c1,s1,n)*gmpy2.powmod(c2,s2,n))%n

print(number.long_to_bytes(m))

可以解出flag: flag{8c16c91be3f3287ff5a10167e922b33b}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白帽子社区

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

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

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

打赏作者

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

抵扣说明:

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

余额充值