1、n与p的关系

题目

('n=', 288990088827100766680640490138486855101396196362885475612662192799072729620922966280891529295418086760877864145641240773774844610436051331306946338447987578274717185638059894743079958222428285199328796227699729755905906693841390517397968838979989187937765197009779831853782677148778833145391472483838410348187851940691573340443869780062542939942374320161963733291697585221383236756651125859306190611469903757185440175993363742018028809952801247846742033092984755533015067691332105526414972647382492862838910121236931498154729282070633749340622741556189535964547876244515672975306477660510791252904365137930260201368678082714836609782629541945700299956150734915268018652247423889358580950207466855040229003192308083531802714903385087417356434589306892888679309614923529675726467403933384636928018988851880153857796741120106443942767510880882869047315219885712389114991426210349790111241522116230105084964008967100552072784232695481018329040160132729906613461492188324496134449714224077399892244195702892564301367979224008861187860872226748641058472580561639257018145326272111688770894219937657825160193141745581367365405561724485260621462608988652159867916009465022291576279442397617091954522421449924662838224659158273250901130749121L)
('e=', 65537)
('c=', 137779053430049038434216593290618874948270200405399256269581378223281016900970652718848813337302671790604519081916876544192809184345327660912429768032693176503712428533118856746085101104530004384957878944306712448749988496680310178630490784192543750138162129344588248045230306419533817167822335810463544443187846127211253432794996440212197855199829148459690714008745033082890861457636322467364543567930633647015286211438515604345302463094804730828792938997761910285052058358568926162211399619255066215361304899897417756093402335995371832711502872437222512001157985528518717742208913450911897520543227613018962674806657657794649288850627452188012334771673285026593343941925348598797901401883986370253828688950287301471120024830787649255742214626285600948267746659887690844720659848203176190617138006403190722263638569661414450881185857994056115115153097909046365223008051874366779117102760347630728800614449748348771220711988694991053148346720284163230564679943853428714970819836241190140660788978119501945023060842021831844356818641202498764351298545672779480524641463732128037763042975104375933047678750844329826766152652487655163730244337514529371558702619207820731799113790535682515957476301736026894861608980444780607729321721653L)

我的解答

只给这点信息因此n必可分解。n和c都是长整型数据,直接转十进制超出范围,因此尝试把末尾L删去分解n可得某个数的四次方,看作p

有了p就正常思路解就行。

已知n = p * q 以及 n = p ** 4  => q = p ** 3

=> phi = (p - 1) * (p ** 3 - 1)

但尝试发现用此phi解不出来最终flag。

phi展开后省略了一些小数据尝试几遍发现使用 phi = p ** 4 - p ** 3 (即p ** 3(p - 1))可行

(这里不知道是为什么?可能是因为p**3-1太大了完全可以忽略掉-1?)

最终exp:

from Crypto.Util.number import *
import gmpy2
from gmpy2 import iroot
c = 137779053430049038434216593290618874948270200405399256269581378223281016900970652718848813337302671790604519081916876544192809184345327660912429768032693176503712428533118856746085101104530004384957878944306712448749988496680310178630490784192543750138162129344588248045230306419533817167822335810463544443187846127211253432794996440212197855199829148459690714008745033082890861457636322467364543567930633647015286211438515604345302463094804730828792938997761910285052058358568926162211399619255066215361304899897417756093402335995371832711502872437222512001157985528518717742208913450911897520543227613018962674806657657794649288850627452188012334771673285026593343941925348598797901401883986370253828688950287301471120024830787649255742214626285600948267746659887690844720659848203176190617138006403190722263638569661414450881185857994056115115153097909046365223008051874366779117102760347630728800614449748348771220711988694991053148346720284163230564679943853428714970819836241190140660788978119501945023060842021831844356818641202498764351298545672779480524641463732128037763042975104375933047678750844329826766152652487655163730244337514529371558702619207820731799113790535682515957476301736026894861608980444780607729321721653
n = 288990088827100766680640490138486855101396196362885475612662192799072729620922966280891529295418086760877864145641240773774844610436051331306946338447987578274717185638059894743079958222428285199328796227699729755905906693841390517397968838979989187937765197009779831853782677148778833145391472483838410348187851940691573340443869780062542939942374320161963733291697585221383236756651125859306190611469903757185440175993363742018028809952801247846742033092984755533015067691332105526414972647382492862838910121236931498154729282070633749340622741556189535964547876244515672975306477660510791252904365137930260201368678082714836609782629541945700299956150734915268018652247423889358580950207466855040229003192308083531802714903385087417356434589306892888679309614923529675726467403933384636928018988851880153857796741120106443942767510880882869047315219885712389114991426210349790111241522116230105084964008967100552072784232695481018329040160132729906613461492188324496134449714224077399892244195702892564301367979224008861187860872226748641058472580561639257018145326272111688770894219937657825160193141745581367365405561724485260621462608988652159867916009465022291576279442397617091954522421449924662838224659158273250901130749121
e = 65537
p = iroot(n,4)[0]
phi = p**4 - p**3
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))
#flag{5a9d88e1-e588-11ed-a829-907841e2ffbc}

2、奇怪的N

题目

n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537

我的解答:

在线网站http://factordb.com/尝试分解n,发现分解的结果就一个,依然是n本身。原来题目说的奇怪的n就是这个意思啊!

我们不难发现这种情况下n是一个素数。 那就好办了。
根据RSA的原理:

n = p * q

φ(n) = (p-1) * (q-1)

我们知道分解n是为了得到p,q以此来计算φ(n) 。有了φ(n) 我们才能求出解密指数d

那么本题既然n是素数,因此有φ(n)=n−1 直接求出φ(n)就可以了 。

exp:

import gmpy2
from Crypto.Util.number import long_to_bytes
n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537
phi = n-1 d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))
#flag{c9991f77-c898-406a-8785-5a6db8081533}

3、m与c互换位置(即m是密文,c是明文)

题目

import gmpy2
import uuid
import random
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
flag="flag{"+str(uuid.uuid4())+"}"
n=p*q
phi=(p-1)*(q-1)
while True:
e=random.randint(10000,65537)
if gmpy2.gcd(e,phi)==1:
break
d=libnum.invmod(e,phi)
c=libnum.s2n(flag)
m=pow(c,d,n)
print("p=",p)
print("q=",q)
print("m=",m)
print("d=",d)
print("n=",n)
p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747

我的解答:

分析题目所给信息,我们发现跟以前的题目不一样了,这里m变成了密文,而要求的明文则是c。两者换啦换位置。

我们知道 m ≡ cd(mod n)
又有 ed ≡ 1(mod φ(n))
因此有 c≡me(mod n)

题目并没有给出e的值。但我们有d,p,q,φ(n)那就没问题了。

exp:

p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747
import libnum
phi_n = (p-1)*(q-1)
e = libnum.invmod(d,phi_n)
c = pow(m, e, n)
print(libnum.n2s(c))
# flag{0ba0fcc8-88d2-4f78-b1e2-e3823539340c}

RSA趣题篇(简单型)的更多相关文章

  1. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  2. 训练趣题:黑与白 有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。(此处用javascript实现)

    今天的题目原题是这样的: “ 黑与白:有A.B.C.D.E五人,每人额头上都帖了一张黑或白的纸.五人对坐,每人都可以看到其它人额头上的纸的颜色.五人相互观察后,A说:“我看见有三人额头上帖的是白纸,一 ...

  3. RSA加密算法深入篇

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  4. 【编码题篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    编写一个方法 求一个字符串的字节长度假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var byt ...

  5. Java笔试题库之选题题篇【141-210题】

    141.Struts框架可以支持以下哪种程序开发语言? A.C B.C++ C.Java D.C# 解答:C 142.在Servlet处理请求的方式为. A.以进程的方式 B.以程序的方式 C.以线程 ...

  6. Java笔试题库之选题题篇【71-140题】

    71下面哪几个函数是public void method(){̷}的重载函数?() A.public void method( int m){̷} B.public int method(){̷} C ...

  7. leetcode每日刷题计划-简单篇day12

    Num 125 验证回文串 Valid Palindrome 非常有收货的一道题嘻嘻嘻,本来是考试期间划水挑的题,坑点有点多 第一个是注意对temp1和temp2中途更新的判断 第二个是字符串频繁的作 ...

  8. leetcode每日刷题计划-简单篇day10

    跳题,不熟悉的留到周末再做. 保持冷静,不信画饼. num 100 相同的树 Same Tree 做法可能不是特别简洁,注意一下.最后判断完子树以后,要确定根的数值是一样的 然后在isleaf的判定先 ...

  9. leetcode每日刷题计划-简单篇day9

    Num 38 报数 Count and Say 题意读起来比较费劲..看懂了题还是不难的 注意最后的长度是sz的长度,开始写错写的len 在下次计算的时候len要更新下 说明 直接让char和int进 ...

  10. leetcode每日刷题计划-简单篇day6

    突发奇想&胡思乱想的一天 银行家算法证明错了并挂在黑板上的可怜希希 Num 53 最大子序和 Maximum Subarray O(n)的算法实现了,分治法有空补 class Solution ...

随机推荐

  1. 37. 干货系列从零用Rust编写负载均衡及代理,负载均衡中try_files实现

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  2. 【eBPF-02】入门:基于 BCC 框架的程序进阶

    本文是 eBPF 系列的第二篇文章,我们来学习 eBPF BCC 框架的进阶用法,对上一篇文章中的代码进行升级,动态输出进程运行时的参数情况. 主要内容包括: 通过 kprobe 挂载内核事件的 eB ...

  3. 技本功|统计信息对SQL执行效率的影响

    在一个风和日丽的下午,奋哥哥突然接到业务方线上业务数据库CPU资源告警信息,立马放下手里的枸杞登录业务方阿里云控制台查看具体问题. 对于数据库当前正在发生中的问题,我们首先从数据库实时会话信息中尝试抓 ...

  4. Ubuntu 安装Nvidia 显卡驱动

    在Nvidia官网下载对应驱动:https://www.nvidia.cn/geforce/drivers/ sudo vim /etc/modprobe.d/blacklist.conf black ...

  5. 微信小程序中业务域名的配置

    需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载 业务域名的证书 2,将下载的证书放进nginx的根目录 3,在nginx中 (root为.txt的地址)

  6. LeetCode 二分查找篇(69、33、704)

    69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  7. Java 将Excel工作簿按工作表拆分为多个文档

    本文介绍在Java代码环境中如何将Excel工作簿按工作表拆分为多个Excel文档,即:把Excel工作簿中的每一个工作表单独保存为一个Excel工作簿文件. 思路及方法:通过将源文档中的每个工作表通 ...

  8. 干掉PPT!现场编码的职级晋升答辩你参加过么?

    摘要:研发讲究的是真本事,是骡子是马咱们还得代码上见真章. 最近这小半年的时间,凭借对各种API的巧妙应用,我从一个差点被淘汰的"前浪"变成了公司人人尊敬的技术委员会副主席,工作思 ...

  9. 在云南,我用华为云AI开发出千万级用户的应用

    摘要:创造无限,当"燃"是开发者,华为云1024程序员节,陶新乐和大家分享独立开发者的自由之路. 本文分享自华为云社区<在云南,我用华为云AI开发出千万级用户的应用>, ...

  10. 手把手教你如何配置DBeaver对接FusionInsigth MRS Spark2x

    摘要:dbeaver是免费和开源为开发人员和数据库管理员通用数据库工具.本文介绍如何配置dbeaver对接FusionInsigth MRS Spark2x. 本文分享自华为云社区<DBeave ...