RSA基础题型

1、RSAROLL

题目介绍:

RSA roll!roll!roll!
Only number and a-z
(don’t use editor
which MS provide)

然后是题目:

{920139713,19}

704796792
752211152
274704164
18414022
368270835
483295235
263072905
459788476
483295235
459788476
663551792
475206804
459788476
428313374
475206804
459788476
425392137
704796792
458265677
341524652
483295235
534149509
425392137
428313374
425392137
341524652
458265677
263072905
483295235
828509797
341524652
425392137
475206804
428313374
483295235
475206804
459788476
306220148

分析得出{920139713,19}是公钥
N = 920139713
e = 19
这里的N较小我们可以用yafu进行分解
直接打开yafu-
请添加图片描述输入命令factor(n)便能在当前目录下生成factor.log,分解n得出p、q
请添加图片描述

余下的便都是c,但是这个c的个数很多需要循环

import gmpy2 as gp

p = gp.mpz(49891)
q = gp.mpz(18443)
n = gp.mpz(920139713)
e = gp.mpz(19)

fai = (p-1)*(q-1)
d = gp.invert(e,fai)

f = open('H:/Python3.0Work/Crypto/1.txt','r')
while 1 :
    F = int(f.readline())   #会报错但是问题不大
    if not F:
        break
    else:
        c = gp.mpz()
        c = F
        m = pow(c,d,n)
        print(chr(m),end='')

结果如下:

在这里插入图片描述
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

2、 2021山东省网络安全决赛(题目:rsssssa8)

题目附件如下

from Crypto.Util.number import *
from secret import flag
p = getPrime(512)
q = getPrime(512)
n = p*q
e = 3
a = getPrime(16)
b = getPrime(16)
c1 = pow(flag, e, n)
c2 = pow(a*flag+b, e, n)

print("c1 =",c1)
print("c2 =",c2)
print("n =",n)
print("a =",a)

'''
c1 = 184706733600030961911836917506112422167545490484023895702890946835667701083139603160422181673643482375812680575389095142687410989330788033710088246782628789557043348703224329521695342998531932006194716597523162472306119232610211018033794397444557249275490146884605734496362904120178078821
c2 = 10418682562718909042213936587910449264489833039364911527081051331485882026176525975770460658763924467672782657658670208897885520552980202093589409615449950907692270444130539851619402510468945166179697778957796025706837202038217770754419639715026735344172221776217898364276354693723003323146147852444824
n = 62238551978433838001498457736429006991865583728626132139136256391485968857741649418990547571437762934449868634562245286176618471355786138381567476265484214608900167440511382125259943558246159258716213963735131393428605626773031068644321261445284230749457763679689698230585197310945795260304584991080604702929
a = 38351
'''

这题与BUU上Dangerous RSA属于同一种题,这题纯属加了一些混淆的条件

本题考点:低加密指数攻击

下面引用大佬们的话:
当n很大时,e很小,e=3
(因为选取e=3省时省力,本题的e便是3).
当e=3的时候满足下面条件:

    1:m^3<n,也就是说m^3=c。  
    2:m^3>n,即(m^3+in)mod n=c(爆破i,不知道i取什么值)  

假设我们  M^e / n 的商为 k 余数为C,
则M^e = kn + C,对K进行爆破,只要k满足 kn + C能够开e次方就可以得明文

我们写脚本如下:

import gmpy2
import libnum
e  =  3
n  =  62238551978433838001498457736429006991865583728626132139136256391485968857741649418990547571437762934449868634562245286176618471355786138381567476265484214608900167440511382125259943558246159258716213963735131393428605626773031068644321261445284230749457763679689698230585197310945795260304584991080604702929
c1 = 184706733600030961911836917506112422167545490484023895702890946835667701083139603160422181673643482375812680575389095142687410989330788033710088246782628789557043348703224329521695342998531932006194716597523162472306119232610211018033794397444557249275490146884605734496362904120178078821

k=0
while 1:
    res = gmpy2.iroot(c1+k*n,e) 
    if(res[1] == True):
        print(libnum.n2s(int(res[0]))) #转为字符串
        break
    k=k+1

3、Simple_rsa

调查人员通过监听网络数据截取了以下消息。这次,网络罪犯使用了一个更先进的加密算法进行加密,这个加密算法叫做 RSA。
参数如下:
N = 84692954109552769374106613978990493265631425360379150170786955314741169348953
e = 65537
下面是加密之后的消息:
C = 21698323120385586424573862118808098555103084743518277473544693629498197679429
成功解密之后的消息可以被转换成一个有意义的英文字符串。

拿到这一题可以直接对N进行分解,如下得到p、q

请添加图片描述脚本如下

import gmpy2
import binascii
import libnum
#经典给出四个参数
p =  gmpy2.mpz(320181056072095218868339092717483179171)
q =  gmpy2.mpz(264515818482660146971535304176490802643)
e =  gmpy2.mpz(65537)
c =  gmpy2.mpz(21698323120385586424573862118808098555103084743518277473544693629498197679429)

n = p * q
pai = (p-1)*(q-1)
d = gmpy2.invert(e,pai)
m = pow(c,d,n)
print(libnum.n2s(int(m)))

请添加图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

疯狂的1998

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

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

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

打赏作者

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

抵扣说明:

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

余额充值