RSA---n分解攻击

26 篇文章 2 订阅

题目给出public.key, flag.enc

如果n较小,可以尝试分解n来进行攻击

# coding:utf8

"""
需要安装2个模块:rsa,pycrypto
如果有问题,应该把之前安装的crypto、pycrypto模块卸载掉重新安装一遍
还需要使用 yafu 分解n
"""

import rsa
from Crypto.PublicKey import RSA

def egcd(a, b):
  if a == 0:
    return (b, 0, 1)
  else:
    g, y, x = egcd(b % a, a)
    return (g, x - (b // a) * y, y)


pub = RSA.importKey(open('pub.key').read())
n = long(pub.n)
e = long(pub.e)

########################################################################################
# 通过yafu分解n,命令行打开yafu,输入factor(n)即可
# 如果可联网,还可以使用http://www.factordb.com/网站分解   
# p = 28596...
# q = 30400...

if not p an not q:
    print 'Need get p,q'
    exit(0)

d = egcd((p - 1) * (q - 1), e)[2]
if d < 0:
    d += (p - 1) * (q - 1)


key = RSA.construct((n, e, d))    # 如果e较小,e应转化成long型: e = long(e)
key.exportKey()
open("private.pem", "w").write(key.exportKey())


p = open("private.pem").read()
privkey = rsa.PrivateKey.load_pkcs1(p)
crypto = open("flag.enc").read()
message = rsa.decrypt(crypto, privkey)
print message

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值