rsa简单脚本

低加密指数攻击:

假设e=3, 公钥中的加密指数e很小,但是模数n很大 有RSA加密公式: C=M^e % n (C密文,M明文) 则: 当M^e < n 时, C = M^e ,所以对C开方就能得到M

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

#python3

## -*- coding: utf-8 -*-#

from gmpy2 import iroot
import libnum
e = 0x3
n = 0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793
c = 0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365

k = 0
while 1:
   res = iroot(c+k*n,e)  #c+k*n 开3次方根 能开3次方即可
   #print(res)
   #res = (mpz(13040004482819713819817340524563023159919305047824600478799740488797710355579494486728991357), True)
   if(res[1] == True):
       print(libnum.n2s(int(res[0]))) #转为字符串
       break
   k=k+1
#b'flag{25df8caf006ee5db94d48144c33b2c3b}'

下面是做题收集到的一些脚本

p-q-e-c

import gmpy2
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
#1.求d
d = gmpy2.invert(e,(p-1)*(q-1))
#2.求n
n = p*q
#3.m=pow(c,d,n)
flag = pow(C,d,n)
print(flag)
print(hex(flag))#得到16进制
#将16进制转化ascll
flag = ''
s='61636365737364656e6965647b5253415f31535f344d345a316e475f52314768543f3f3f3f5f32613532383661667d'
l = len(s)//2
for i in range(l):
   flag += chr(int(s[i*2:(i+1)*2], 16))
print(flag)

n-e-c-q-p

import gmpy2
N,p,q,e=920139713,18443,49891,19
d=gmpy2.invert(e,(p-1)*(q-1))
result=[]

with open("RSAroll.txt","r") as f:
   for line in f.readlines():
       line=line.strip('\n')#去掉列表中每一个元素的换行符
       result.append(chr(pow(int(line),d,N)))

for i in result:
   print(i,end='')
posted @   Clown-q  阅读(734)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示