栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

RSA 2022/8/8

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RSA 2022/8/8

1.已知p,q,e,求d

 (1)求n = p * q

(2)求 phin = (p - 1) * (q - 1)                       #因为p,q为质数

(3)由于 gcd(e,φ(n))=1(可以用assert(1 == gcd(e, phin))进行判断) 且 e * d = 1 mod φ(n)  ,可用pow,d = pow(e, -1, phin)                  #d称作e在φ(n)模下的逆元(模反元素),d = pow(e, -1, phin) 代表 e * d = 1 mod φ(n)(只适用于同余于1的情况)

2. 已知p,q,e,c,求m
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.


p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

Use RSA to find the secret message

 (1)与上题类似,在求出d后,运用m = c ** d(mod n) 可求,即 m = pow(c, d, n)

  3.已知p,q,dp,dq,c求m
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

(1) dp=d%(p-1),dq=d%(q-1)                     #dp,dq相当于两个快速解密的新参数

(2) m = c ** d(mod n),由于d未知,所以我们可以借用dp,dq来代替

(3) 求明文的公式

参考:

(28条消息) RSA dp,dq泄露_ephemeral-fever的博客-CSDN博客

(28条消息) [CTF密码学]RSA相关题目解题方法与python脚本总结(附例题)_plexming的博客-CSDN博客_rsa解密脚本

  • I = gmpy2.invert(p,q)

  • m1 = pow(c,dp,p)

  • m2 = pow(c,dq,q)

  • m = (((m2-m1)*I)%q)*p+m1

  • print(long_to_bytes(m))

(对于m = ?那里最后为什么不%n还是有点困惑)

  4.已知c1,c2,e1,e2,n,求m(共模攻击)
c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291

公式:(a*b)%n=(a%n*b%n)%n

gmpy2.gcdext(a, b):扩展欧几里得算法

扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式 ax + by = gcd(a, b)

参考:

(28条消息) RSA共模攻击(包括原理)_InkTM的博客-CSDN博客_共模攻击

(最后求m的时候没有直接用上面证出来的公式,而是借用(a*b)%n=(a%n*b%n)%n变化了一下,合理猜测,直接算的话数字过大,算不出来)

5.已知e,n,dp,c求m
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657

c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751

参考:

(28条消息) [CTF密码学]RSA相关题目解题方法与python脚本总结(附例题)_plexming的博客-CSDN博客_rsa解密脚本 (28条消息) RSA中dp,dq ,npp的求解方法_路由(_)生的博客-CSDN博客_rsa已知dp

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号