CTFlearn: RSA BEGINNER

原题:

RSA BEGINNER

90 points

182 solves

Cryptography

Hard

intelagent

I found this scribbled on a piece of paper. Can you make sense of it? https://mega.nz/#!zD4wDYiC!iLB3pMJElgWZy6Bv97FF8SJz1KEk9lWsgBSw62mtxQg

下载了链接中的文件,如下:

e: 3

c:219878849218803628752496734037301843801487889344508611639028

n:245841236512478852752909734912575581815967630033049838269083

很明显,e是公钥指数,c是密文,n是大数

首先我尝试了用lowe的方法,将密文用3开方,如果不行加上n再开方。但是尝试了加上很多的n都没有开方成整数。

又看到n的数值不大,应该可以找到n的两个素数因子p和q。利用因式分解数据库http://factordb.com,发现n可以分解成两个素数。知道了两个素数后我们就可以很快地通过公钥e来得到私钥了。

python代码如下:

import gmpy2

e=gmpy2.mpz(3)

c=gmpy2.mpz(219878849218803628752496734037301843801487889344508611639028)

n=gmpy2.mpz(245841236512478852752909734912575581815967630033049838269083)

# 因式分解得到的p和q

p=gmpy2.mpz(590872612825179551336102196593)

q=gmpy2.mpz(416064700201658306196320137931)

phi=gmpy2.mul(p-1,q-1)#计算(p-1)*(q-1)得到phi

d=gmpy2.invert(e,phi)#计算e对于phi的摩反

m=int(gmpy2.powmod(c,d,n))#c的d次方mod n

mt=bytes.fromhex(hex(m)[2:])#将int转换成byte

print(mt)

得到结果:

b'abctf{rs4_is_aw3s0m3}'

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 学一点有趣的数论知识 在探究RSA算法的原理之前,我们先来学习一点有趣的数论知识(数学分支之一,主要研究整数的性质...
    24f464006eaf阅读 2,180评论 0 5
  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/RS...
    道无涯_cc76阅读 2,620评论 0 1
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,049评论 0 2
  • 1.感情还在,感觉已经不在了 过年这段时间没更新,一打开后台,发现大家都在后台各种吐槽,最多的就是关于春节期间的亲...
    苏小鹿lu阅读 2,049评论 2 25
  • 孩子补完课,想要做的第一件事情是去姥姥家,给姥姥烧一次锅,吃一块在姥姥家烤的烧红薯,我欣然同意了。 孩子从小在乡下...
    我是慕一阅读 556评论 0 3